Desarrollo Web Programaci�n en PHP

Manual por: DesarrolloWeb.com
"Tu mejor ayuda para aprender a hacer webs"
Versi�n on-line:
http://www.desarrolloweb.com/manuales/12


Introducci�n a la programaci�n en PHP

PHP es uno de los lenguajes de lado servidor m�s extendidos en la web. Nacido en 1994, se trata de un lenguaje de creaci�n relativamente creciente que ha tenido una gran aceptaci�n en la comunidad de webmasters debido sobre todo a la potencia y simplicidad que lo caracterizan.

PHP nos permite embeber su peque�os fragmentos de c�digo dentro de la p�gina HTML y realizar determinadas acciones de una forma f�cil y eficaz sin tener que generar programas programados �ntegramente en un lenguaje distinto al HTML. Por otra parte, y es aqu� donde reside su mayor inter�s con respecto a los lenguajes pensados para los CGI, PHP ofrece un sinf�n de funciones para la explotaci�n de bases de datos de una manera llana, sin complicaciones.

Podr�amos efectuar la quiz�s odiosa comparaci�n de decir que PHP y ASP son lenguajes parecidos en cuanto a potencia y dificultad si bien su sintaxis puede diferir sensiblemente. Algunas diferencias principales pueden, no obstante, mencionarse:

-PHP, aunque multiplataforma, ha sido concebido inicialmente para entornos UNIX y es en este sistema operativo donde se pueden aprovechar mejor sus prestaciones. ASP, siendo una tecnolog�a Microsoft, esta orientado hacia sistemas Windows, especialmente NT.

-Las tareas fundamentales que puede realizar directamente el lenguaje son definidas en PHP como funciones mientras que ASP invoca m�s frecuentemente los objetos. Por supuesto, esto no es m�s que una simple cuesti�n de forma ya que ambos lenguajes soportan igualmente ambos procedimientos.

-ASP realiza numerosas tareas sirvi�ndose de componentes (objetos) que deben ser comprados (o programados) por el servidor a determinadas empresas especializadas. PHP presenta una filosof�a totalmente diferente y, con un esp�ritu m�s generoso, es progresivamente construido por colaboradores desinteresados que implementan nuevas funciones en nuevas versiones del lenguaje.

Este manual va destinado a aquellos que quieren comenzar de cero el aprendizaje de este lenguaje y que buscan en �l la aplicaci�n directa a su proyecto de sitio o a la mejora de su sitio HTML. Los cap�tulos son extremadamente simples, sino simplistas, buscando ser accesibles a la mayor�a. Ellos pueden ser complementados posteriormente con otros art�culos de mayor nivel destinados a gente m�s experimentada.

La forma en la que hemos redactado este manual lo hace accesible a cualquier persona no familiarizada con la programaci�n. Sin embargo, es posible que en determinados momentos alguien que no haya programado nunca pueda verse un poco desorientado. Nuestro consejo es el de no querer entender todo antes de pasar al siguiente cap�tulo sino intentar asimilar algunos conceptos y volver atr�s en cuanto una duda surja o hayamos olvidado alg�n detalle. Nunca viene mal leer varias veces lo mismo hasta que quede bien grabado y asimilado.

Antes de comenzar a leer este manual es altamente aconsejable, sino imprescindible, haber le�do previamente el manual sobre manual sobre p�ginas din�micas en el cual se explica a grandes rasgos qu� es el PHP, algunos conceptos �tiles sobre el modo de trabajar con p�ginas din�micas al mismo tiempo que nos introduce algunos elementos b�sicos de la programaci�n como pueden ser las variables y las funciones.

Otra referencia a la cual haremos alusi�n es el tutorial de SQL que nos ser� de gran ayuda para el tratamiento de bases de datos.

Esperamos que este manual resulte de vuestro agrado y que corresponda a nuestras expectativas: El poder acercar PHP a todos aquellos amantes del desarrollo de webs que quieren dar el paso hacia las webs "profesionales".

Los scripts que usamos en estos primeros ejemplos pueden ser descargados aqu�.


Breve historia de PHP

PHP es un lenguaje creado por una gran comunidad de personas. El sistema fue desarrollado originalmente en el a�o 1994 por Rasmus Lerdorf como un CGI escrito en C que permit�a la interpretaci�n de un n�mero limitado de comandos. El sistema fue denominado Personal Home Page Tools y adquiri� relativo �xito gracias a que otras personas pidieron a Rasmus que les permitiese utilizar sus programas en sus propias p�ginas. Dada la aceptaci�n del primer PHP y de manera adicional, su creador dise�� un sistema para procesar formularios al que le atribuy� el nombre de FI (Form Interpreter) y el conjunto de estas dos herramientas, ser�a la primera versi�n compacta del lenguaje: PHP/FI.

 La siguiente gran contribuci�n al lenguaje se realiz� a mediados del 97 cuando se volvi� a programar el analizador sint�ctico, se incluyeron nuevas funcionalidades como el soporte a nuevos protocolos de Internet y el soporte a la gran mayor�a de las bases de datos comerciales. Todas estas mejoras sentaron las bases de PHP versi�n 3. Actualmente PHP se encuentra en su versi�n 4, que utiliza el motor Zend, desarrollado con mayor meditaci�n para cubrir las necesidades actuales y solucionar algunos inconvenientes de la anterior versi�n. Algunas mejoras de esta nueva versi�n son su rapidez -gracias a que primero se compila y luego se ejecuta, mientras que antes se ejecutaba mientras se interpretaba el c�digo-, su mayor independencia del servidor web -creando versiones de PHP nativas para m�s plataformas- y un API m�s elaborado y con m�s funciones.

est
Gr�fica del n�mero de dominios y direcciones IP que utilizan PHP.
Estad�stica de Netcraft.

En el �ltimo a�o, el n�mero de servidores que utilizan PHP se ha disparado, logrando situarse cerca de los 5 millones de sitios y 800.000 direcciones IP, lo que le ha convertido a PHP en una tecnolog�a popular. Esto es debido, entre otras razones, a que PHP es el complemento ideal para que el t�ndem Linux-Apache sea compatible con la programaci�n del lado del servidor de sitios web. Gracias a la aceptaci�n que ha logrado, y los grandes esfuerzos realizados por una creciente comunidad de colaboradores para implementarlo de la manera m�s �ptima, podemos asegurar que el lenguaje se convertir� en un est�ndar que compartir� los �xitos augurados al conjunto de sistemas desarrollados en c�digo abierto.




Tareas principales del PHP

Poco a poco el PHP se va convirtiendo en un lenguaje que nos permite hacer de todo. En un principio dise�ado para realizar poco m�s que un contador y un libro de visitas, PHP ha experimentado en poco tiempo una verdadera revoluci�n y, a partir de sus funciones, en estos momentos se pueden realizar una multitud de tareas �tiles para el desarrollo del web:

Funciones de correo electr�nico
Podemos con una facilidad asombrosa enviar un e-mail a una persona o lista parametrizando toda una serie de aspectos tales como el e-mail de procedencia, asunto, persona a responder...

Otras funciones menos frecuentes pero de indudable utilidad para gestionar correos electr�nicos son incluidas en su librer�a.

Gesti�n de bases de datos
Resulta dif�cil concebir un sitio actual, potente y rico en contenido que no es gestionado por una base de datos. El lenguaje PHP ofrece interfaces para el acceso a la mayor�a de las bases de datos comerciales y por ODBC a todas las bases de datos posibles en sistemas Microsoft, a partir de las cuales podremos editar el contenido de nuestro sitio con absoluta sencillez.

Gesti�n de archivos
Crear, borrar, mover, modificar...cualquier tipo de operaci�n m�s o menos razonable que se nos pueda ocurrir puede ser realizada a partir de una amplia librer�a de funciones para la gesti�n de archivos por PHP. Tambi�n podemos transferir archivos por FTP a partir de sentencias en nuestro c�digo, protocolo para el cual PHP ha previsto tambi�n gran cantidad de funciones.

Tratamiento de im�genes
Evidentemente resulta mucho m�s sencillo utilizar Photoshop para una el tratamiento de im�genes pero...�Y si tenemos que tratar miles de im�genes enviadas por nuestros internautas?

La verdad es que puede resultar muy tedioso uniformar en tama�o y formato miles de im�genes recibidas d�a tras d�a. Todo esto puede ser tambi�n automatizado eficazmente mediante PHP.

Tambi�n puede parecer �til el crear botones din�micos, es decir, botones en los que utilizamos el mismo dise�o y solo cambiamos el texto. Podremos por ejemplo crear un bot�n haciendo una �nica llamada a una funci�n en la que introducimos el estilo del bot�n y el texto a introducir obteniendo autom�ticamente el bot�n deseado.

A partir de la librer�a de funciones graficas podemos hacer esto y mucho m�s.

Muchas otras funciones pensadas para Internet (tratamiento de cookies, accesos restringidos, comercio electr�nico...) o para prop�sito general (funciones matem�ticas, explotaci�n de cadenas, de fechas, correcci�n ortogr�fica, compresi�n de archivos...) son realizadas por este lenguaje. A esta inmensa librer�a cabe ahora a�adir todas las funciones personales que uno va creando por necesidades propias y que luego son reutilizadas en otros sitios y todas aquellas intercambiadas u obtenidas en foros o sitios especializados.

Como puede verse, las posibilidades que se nos presentan son sorprendentemente vastas. Lo �nico que se necesita es un poco de ganas de aprender y algo de paciencia en nuestros primeros pasos. El resultado puede ser muy satisfactorio.


Instalaci�n de PHP en nuestro servidor

Como todo lenguaje de lado servidor, PHP, requiere de la instalaci�n de un servidor en nuestro PC para poder trabajar en local. Este modo de trabajo resulta a todas luces m�s pr�ctico que colgar los archivos por FTP en el servidor y ejecutarlos desde Internet.

As� pues, antes comenzar a crear nuestros programas en PHP, es necesario:

- Convertir nuestro ordenador en un servidor. Esto se hace instalando uno de los varios servidores disponibles para el sistema operativo de nuestra m�quina.

- Introducir en nuestro servidor los archivos que le permitir�n la comprensi�n del PHP. Estos archivos pueden ser descargados, en su versi�n m�s actual, de la p�gina oficial de PHP.

Para conocer la forma de instalar PHP sobre cada servidor de cada sistema operativo podemos dirigirnos al apartado de documentaci�n de la p�gina oficial de PHP donde disponemos de un manual en HTML de r�pida consulta y un enorme manual en PDF de casi 1000 p�ginas traducido al castellano donde explican minuciosamente y entre otras cosas, los pasos a seguir para cada caso particular. De todos modos, nosotros vamos a ofrecer algunas ayudas para configurar PHP en los sistemas m�s habituales.

La elecci�n de vuestro programa servidor tendr� mucho que ver con el sistema operativo que teng�is corriendo en vuestro ordenador. Estas ser�an algunas posibilidades de sistemas opertativos y soluciones que funcionan bien.

Windows 95/98

Si est�is trabajando en Windows 95 o Windows 98 y para desarrolladores principiantes, podr�a ser recomendable utilizar el servidor Personal Web Ser. En este caso necesitar�ais:

- Personal Web Server de Microsoft como servidor el cual os sirve adem�s para el aprendizaje en ASP. Ten�is una gu�a de instalaci�n y configuraci�n en esta misma web.

- Una instalaci�n autoextraible de la versi�n m�s reciente de PHP que, adem�s de tardar menos en descargarse, os guiar� paso a paso en el proceso de instalaci�n. Esta versi�n no incluye todas las funcionalidades de PHP, pero os servir� para aprender hasta un buen nivel.

Hay que se�alar que, para el caso de PHP en PWS, adem�s de todo lo dicho en cap�tulo de instalaci�n, es importante al crear el directorio virtual permitir la ejecuci�n de scripts validando la caja correspondiente.

En Windows 95/98 tambi�n podremos utilizar el servidor Apache y puede que sea una opci�n todav�a m�s completa que la de utilizar PWS. A continuaci�n explicamos m�s sobre ello.

Windows ME y XP Home edition

No hemos probado PHP en estas plataformas, pero en principio no tienen compatibilidad con Personal Web Server, por lo que deber�amos decantarnos por otro servidor.

Otra posibilidad para los usuarios de Windows en general es instalar Apache como servidor web lo cual puede resultar ventajoso con respecto al uso del PWS ya que PHP est� principalmente dise�ado para correr en este servidor. Esto quiere decir que, aunque en principio todo deber�a funcionar correctamente sobre ambos servidores, es posible que alg�n bug no corregido haga fallar uno de nuestros scripts si trabajamos para con un servidor cuyas actualizaciones son menos frecuentes y detalladas.

Apache ha sido especialmente pensado para plataformas Unix-Linux, aunque recientemente, con la Apache 2.0, han desarrollado una versi�n espec�fica para Windows.

Disponemos de un art�culo para aprender a configurar PHP sobre Apache en Windows, como CGI y tambi�n como m�dulo de Apache.

Windows NT, Windows 2000 y XP en sus versiones Profesional y Server

Para estos sistemas tenemos dos posibilidades muy interesantes, ya que podremos instalar PHP sobre Internet Information Server o sobre Apache con todas las garant�as. Si hubiese que recomendar una de las dos opciones, nos decantar�amos por Apache debido a que, como dec�amos, PHP est� pensado para trabajar sobre Apache. Podr�a ser interesante IIS en el caso de que deseemos correr ASP y PHP sobre el mismo servidor, ya que, en principio, Apache no es compatible con ASP.

Unix - Linux

Hay que decir, no obstante, que las mejores prestaciones de este lenguaje son obtenidas trabajando en entorno Unix o Linux y con un servidor Apache, la combinaci�n m�s corriente en la mayor�a de los servidores de Internet que trabajan con PHP.

Referencia: En DesarrolloWeb hemos publicado diversos manuales y art�culos que pueden ser una buena referencia para la instalaci�n de PHP. Algunos se pueden ver a continuaci�n:

Configuraci�n de PHP con Apache en Windows
Configuraci�n de PHP como m�dulo de Apache, tambi�n en Windows
Instalaci�n del Personal Web Server
Instalaci�n de IIS en Windows XP profesional
Directorio de Apache (Hemos publicado un manual o estar� en breve)

Conclusi�n

En cualquier caso, para fines de desarrollo en local, podemos contentarnos en un principio de trabajar con cualquier sistema. Solamente en casos de programaci�n realmente avanzada podremos confrontarnos con problemas relacionados con el sistema operativo utilizado o el servidor en el que hacemos correr nuestras p�ginas. Hay que pensar tambi�n que, en casos puntuales para los que nuestro PC pueda quedarse corto, podemos hacer directamente nuestras pruebas en el servidor donde alojamos nuestro sitio el cual ser� muy probablemente, como hemos dicho, un Unix o Linux funcionando con Apache.


Configuraci�n de PHP con Apache en Windows, como CGI

El presente art�culo trata de c�mo configurar PHP y Apache para que trabajen conjuntamente en un sistema Windows. Adem�s, este articulo asume que hay un servidor Apache configurado en el Windows, y que funciona correctamente.

Referencia: Si deseamos conocer las distintas posibilidades para la instalaci�n de PHP en los distintos sistemas operativos y servidores, puede ser de utilidad la lectura del art�culo Instalaci�n de PHP en nuestro servidor.

Existen dos formas de configurar PHP para trabajar con Apache, instalar como un m�dulo o instalar como un CGI. En este art�culo vamos a ver c�mo instalarlo com CGI, aunque disponemos de otro art�culo para instalar PHP como m�dulo en Apache.

Para instalar PHP como un CGI hay que seguir los siguientes pasos:

En primer lugar, hay que descargarse PHP desde la p�gina de php.net. Existen dos versiones, una que tiene un instalador, y otra que es un fichero ZIP. Hay que descargarse esta �ltima.

Una vez descargado, hay que descomprimirlo dentro de una carpeta, esta no tiene que estar bajo el �rbol de directorios de Apache. El art�culo asumir� que se descomprime dentro de la carpeta C:\PHP. Comprobar que los contenidos del archivo ZIP no quedan en un subdirectorio de la carptea C:\PHP, sino directamente en dicha carpeta.

Dentro de la carpeta c:\PHP se encuentra un fichero llamado PHP4ts.dll, hay que mover el fichero dentro de la carpeta: c:\windows\system � c:\winnt\system

A continuaci�n, dentro de la carpeta c:\php se encuentra un fichero llamado php.ini-recomended. Hay que copiar este fichero dentro de la carpeta c:\Windows, y renombrarlo a php.ini.

En este fichero se encuentra toda la configuraci�n de PHP, y las modificaciones en la configuraci�n de PHP (mostrar Errores, variables globales etc...) se encuentra dentro del mismo.
Es muy recomendable cambiar la directiva display_errors que por defecto esta en OFF, y pornerla en ON, para poder ver los errores que se producen en las p�ginas durante el desarrollo. Para un servidor en producci�n en conveniente dejarla en OFF.

Una vez se han hecho estos cambios, queda indicarle al Apache, donde se encuentra instalado el PHP, para ello hay que editar el fichero httpd.conf que se encuentra dentro de la carpeta conf, en la carpeta de instalaci�n del apache (por defecto c:\archivos de programa\apache group\apache2\conf)

Abrir el fichero, y situarse al final del mismo, y escribir las siguientes l�neas:

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php.exe"

En ellas se indica donde se encuentra el ejecutable de php, y lo asocia a los ficheros .php que se encuentren dentro de apache.

A continuaci�n reiniciar el servidor Apache, y ya esta!

Por �ltimo, indicar que para probar la nueva instalaci�n, es recomendable crear un fichero php con el siguiente contenido:

<? phpinfo();?>

Luego lo guardamosdentro de la carpeta ra�z de documentos del Apache (por defecto c:\archivos de programa\apache group\apache2\htdocs ), con un nombre terminado en .php, por ejemplo info.php

Para ejecutarlo, a trav�s de un navegador, escribir la direcci�n http://localhost/info.php.
Deber�a aparecer una pantalla como la que se muestra a continuaci�n.

Si la vemos correctamente es que todo ha ido bien y que tenemos perfectamente instalado PHP en nuestro servidor Apache.

Nota: Este tipo de instalaci�n de PHP sobre Apache es poco recomendada por motivos de seguridad. Podemos seguirla para configurar PHP en local, con intenci�n de desarrollar nuestras p�ginas web, pero nunca si vamos a utilizar el servidor en un entorno de producci�n, es decir, en un servidor que se encuentre permanentemente conectado a Internet sirviendo p�ginas a todo tipo de usuarios.

Ser�a necesario instalar PHP como un m�dulo de Apache, en lugar de CGI, para dotar al sistema de una mayor seguridad, y tambi�n m�s potencia.




Configuraci�n de PHP como modulo de Apache en Windows

En este art�culo vamos a explicar c�mo instalar PHP como m�dulo de Apache 2.0 en un sistema Windows. Para las pruebas hemos utilizado Windows XP, pero seguro que con otros sistemas el proceso ser� muy parecido, aunque, en todo caso, indicaremos las diferencias documentadas en el sitio de PHP.

Anteriormente hab�amos explicado la instalaci�n de PHP como un CGI, aunque en la p�gina de PHP desaconsejan esta opci�n, puesto que adolece de grabes problemas de seguridad. Adem�s, PHP instalado como m�dulo de Apache resulta mucho m�s r�pido que como CGI.

Referencia: Vamos a suponer que el servidor de p�ginas web Apache 2.0 est� instalado en nuestro sistema. No obstante, para los que no lo tengan, les referimos a nuestro manual de instalaci�n y configuraci�n de Apache.

Descargar y descomprimir PHP

El primer paso consiste en descargar la �ltima versi�n de PHP. Podremos hacerlo desde la p�gina oficial de PHP, en la secci�n de descargas. http://www.php.net/downloads.php Debemos elegir la versi�n "zip package" que contiene todas las funcionalidades de PHP y el m�dulo necesario para instalarlo en Apache.

Una vez descargado el paquete comprimido en .zip de PHP necesitamos descomprimirlo en nuestro disco duro. Podemos utilizar el directorio ra�z del disco duro para descomprimir los archivos. En ese caso, se crear� un directorio llamado algo como "php-4.3.1-Win32" que colgar� de nuestro directorio ra�z. Se recomienda cambiar el nombre del directorio creado a algo como "c:\php". En todo caso, nos advierten en la p�gina de PHP sobre no colocar ning�n nombre de directorio que contenga espacios, pues alg�n servidor web puede dar problemas. Por ejemplo, cuidado con instalar PHP en un directorio como este "c:\archivos de programa\php", pues en la ruta tenemos directorios con espacios.

Copia de las DLL

A continuaci�n nos informan sobre la necesidad de copiar en nuestro directorio de sistema una serie de librer�as (.dll), que encontraremos en el directorio sapi de nuestra instalaci�n de PHP, supuestamente algo como "c:\php\sapi",

El mencionado directorio de sistema puede variar de unas versiones a otras de Windows. En Windows XP, el directorio de sistema donde debemos copiar las dll, es "C:\WINDOWS\system32". En Windows 9x/ME, el directorio ser�a "C:\Windows\System" y en Windows NT/2000 ser�a el directorio "C:\WINNT\System32" o bien, "C:\WINNT40\System32".

Nota: no se deben mezclar las DLL de diversas versiones de PHP, porque de lo contrario, podr�a causarnos problemas.

Definir un archivo php.ini

Otro archivo que debemos copiar, esta vez en nuestro directorio Windows, es el php.ini, que guarda las opciones de configuraci�n definidas para PHP. En la distribuci�n de PHP se incluyen dos archivos php.ini que podemos utilizar directamente en nuestro sistema. Estos dos archivos se llaman "php.ini-dist" y "php.ini-recommended" y contienen unas opciones t�picas de configuraci�n de PHP. Se recomienda utilizar "php.ini-recommended", porque viene optimizado para obtener los mejores niveles de seguridad. En cualquier caso, podemos editar en cualquier momento el contenido del archivo para modificar la configuraci�n de PHP a nuestro gusto o necesidades.

Para definir el php.ini debemos hacer una copia del archivo de configuraci�n escogido ("php.ini-dist" o "php.ini-recommended") y renombrarlo como el "php.ini". Posteriormente debemos copiarlo en nuestra carpeta Windows, que en sistemas 9x/ME/XP es "c:\windows" y en sistemas NT/2000 suele ser "c:\WINNT", o bien "c:\WINNT40".

Editar httpd.conf

Posteriormente deberemos editar nuestro archivo de configuraci�n de Apache, llamado "httpd.conf" que est� en el directorio "conf" de nuestra instalaci�n de Apache. Tambi�n podemos encontrar un acceso directo para editar este archivo accediendo a Inicio - Programas - Apache HTTP Server - Configure Apache HTTP Server - Edit httpd.conf configuration file.

Debemos a�adir un par de l�neas de configuraci�n del m�dulo de Apache.

LoadModule php4_module C:\php\sapi\php4apache2.dll
AddType application/x-httpd-php .php


El lugar adecuado para a�adir esas l�neas es en el bloque de carga de m�dulos, que podemos encontrar si buscamos por el texto "LoadModule". Podemos a�adir las l�neas de carga del m�dulo PHP despu�s de la carga de los otros m�dulos que vienen ya configurados en archivo httpd.conf de Apache.

Si no instalamos PHP en el directorio c:\php, debemos editar las l�neas a colocar en el httpd.conf para colocar la ruta correcta al directorio donde est� la librer�a php4apache2.dll.

Un �ltimo paso

Antes de acabar y probar si PHP se ha instalado correctamente, necesitamos copiar una dll en el directorio sapi. Concretamente, la dll "php4ts.dll", que podemos encontrar en nuestro directorio de instalaci�n de PHP es la que debemos copiar al directorio sapi, algo como "c:\php\sapi".

Nota: Esta acci�n no viene documentada en el manual de PHP, aunque s� no la llevamos a cabo no funcionar�.

El error que obtenemos al tratar de arrancar el Apache es algo como:
Syntax error on line 173 of C:/Archivos de programa/Apache Group/Apache2/conf/httpd.conf:
Cannot load C:/php/sapi/php4apache2.dll into server: No se puede encontrar el m�dulo especificado.

Otra configuraci�n que podemos aplicar al archivo httpd.conf es definir tambi�n como documento por defecto el archivo index.php en nuestro servidor Apache. El documento por defecto es generalmente index.html, pero lo habitual si vamos a programar con PHP es que tambi�n necesitemos definir index.php como documento a mostrar si no se indica otro documento del directorio al que se est� accediendo.

El documento por defecto se define con la variable DirectoryIndex. Nos quedar� una deninici�n como esta:

DirectoryIndex index.html index.html.var index.php

Probar si PHP est� funcionando correctamente

Para terminar, podemos crear una p�gina de prueba de PHP, que colocaremos en nuestro directorio de publicaci�n de Apache, generalmente llamado htdocs, que se aloja dentro del directorio donde se ha instalado Apache, algo como "C:\Archivos de programa\Apache Group\Apache2\htdocs"

Podemos crear un archivo llamado, por ejemplo, "prueba.php", en el que colocaremos dentro el siguiente c�digo:

<?
phpinfo()
?>


Esta funci�n simplemente crear� una p�gina de muestra de las configuraciones definidas para PHP en ese servidor.

Para acceder al archivo creado desde nuestro explorador, escribiremos en la barra de direcciones esta URL:

http://localhost/prueba.php

Deber�a aparecer un resultado como el de la siguiente imagen.

P�gina resultado de hacer un phpinfo()



Instalaci�n de MySQL en Windows

Uno de los puntos fuertes de las p�ginas en PHP es la posibilidad de explotar bases de datos mediante funciones de una simplicidad y potencia muy agradecidas. Estas bases de datos pueden servir a nuestro sitio para almacenar contenidos de una forma sistem�tica que nos permita clasificarlos, buscarlos y editarlos r�pida y f�cilmente.

Una base de datos es sencillamente un conjunto de tablas en las que almacenamos distintos registros (art�culos de una tienda virtual, proveedores o clientes de una empresa, pel�culas en cartelera en el cine...). Estos registros son catalogados en funci�n de distintos par�metros que los caracterizan y que presentan una utilidad a la hora de clasificarlos. As�, por ejemplo, los art�culos de una tienda virtual podr�an catalogarse a partir de distintos campos como puede ser un n�mero de referencia, nombre del art�culo, descripci�n, precio, proveedor...

La base de datos m�s difundida con el tandem UNIX-Apache es sin duda MySQL. Como para el caso de Apache, una versi�n para Windows est� disponible y puede ser descargada gratis.

Su puesta a punto no entra�a mucha dificultad. Una vez instalado el programa podemos ejecutar nuestras ordenes en modo MS-DOS. Para ello abrimos una ventana MS-DOS y nos colocamos en el directorio bin de mysql. En este directorio se encuentran los archivos ejecutables. Aqu� habr� que encontrar un archivo llamado mysqld. En el caso de la versi�n m�s actual durante la redacci�n de este articulo este archivo es llamado mysqld-shareware. Una vez ejecutado este archivo podemos ejecutar el siguiente: mysql.

Llegados a este punto veremos c�mo un mensaje de bienvenida aparece en nuestra pantalla. En estos momentos nos encontramos dentro de la base de datos. A partir de ah� podemos realizar todo tipo de operaciones por sentencias SQL.

No vamos a entrar en una explicaci�n pormenorizada del funcionamiento de esta base de datos ya que esto nos dar�a para un manual entero. Daremos como referencia nuestro tutorial de SQL a partir del cual se puede tener una idea muy pr�ctica de las sentencias necesarias para la creaci�n y edici�n de las tablas. Tambi�n existe una documentaci�n extensa en ingl�s en el directorio Docs de MySQL. A modo de resumen, aqu� os proponemos adem�s las operaciones m�s b�sicas que, combinadas nuestro tutorial de SQL pueden dar soluci�n a gran parte de los casos que se os presenten:

Instrucci�n Descripci�n
Show databases; Muestra el conjunto de bases de datos presentes en el servidor
Use nombre_de_la_base Determina la base de datos sobre la que vamos a trabajar
Create Database nombre_de_la_base; Crea una nueva bd con el nombre especificado
Drop Database nombre_de_la_base; Elimina la base de datos del nombre especificado
Show tables; Muestra las tablas presentes en la base de datos actual
Describe nombre_de_la_tabla; Describe los campos que componen la tabla
Drop Table nombre_de_la_tabla; Borra la tabla de la base de datos
Load Data Local Infile "archivo.txt" Into Table nombre_de_la_tabla; Crea los registros de la tabla a partir de un fichero de texto en el que separamos por tabulaciones todos los campos de un mismo registro.
Quit Salir de MySQL


Para evitarnos el tener que editar nuestras tablas directamente sobre archivos de texto, puede resultar muy pr�ctico usar cualquier otra base de datos con un editor y exportar a continuaci�n la tabla en un archivo de texto configurado para dejar tabulaciones entre cada campo. Esto es posible en Access por ejemplo pinchando con el bot�n derecho sobre la tabla que queremos convertir y eligiendo la opci�n exportar. Una ventana de dialogo aparecer� en la que elegiremos guardar el archivo en tipo texto. El paso siguiente ser� elegir un formato delimitado por tabulaciones sin cualificador de texto.

Otra posibilidad que puede resultar muy pr�ctica y que nos evita trabajar continuamente tecleando �rdenes al estilo de anta�o es servirse de programas en PHP o Perl ya existentes y descargables en la red. El m�s popular sin duda es phpMyAdmin. Este tipo de scripts son ejecutados desde un navegador y pueden ser por tanto albergados en nuestro servidor o empleados en local para, a partir de ellos, administrar MySQL de una forma menos sufrida.

Asimismo, dentro del directorio bin de MySQL, podemos encontrar una peque�a aplicaci�n llamada MySqlManager. Se trata de una interface windows, m�s agradable a la vista y al uso que la que obtenemos ejecutando el archivo mysql. En este caso, las sentencias SQL deben realizarse sin el punto y coma final.


Introducci�n a la sintaxis PHP

PHP se escribe dentro de la propia p�gina web, junto con el c�digo HTML y, como para cualquier otro tipo de lenguaje incluido en un c�digo HTML, en PHP necesitamos especificar cu�les son las partes constitutivas del c�digo escritas en este lenguaje. Esto se hace, como en otros casos, delimitando nuestro c�digo por etiquetas. Podemos utilizar distintos modelos de etiquetas en funci�n de nuestras preferencias y costumbres. Hay que tener sin embargo en cuenta que no necesariamente todas est�n configuradas inicialmente y que otras, como es el caso de <% y %>s�lo est�n disponibles a partir de una determinada versi�n (3.0.4.).

Estos modos de abrir y cerrar las etiquetas son:

<?        y      ?>
<%       y      %>
<?php   y      ?>
<script languaje="php">


Este ultimo modo est� principalmente aconsejado a aquellos que tengan el valor de trabajar con Front Page ya que, usando cualquier otro tipo de etiqueta, corremos el riesgo de que la aplicaci�n nos la borre sin m�s debido a que se trata de un c�digo incomprensible para ella.

El modo de funcionamiento de una p�gina PHP, a grandes rasgos, no difiere del cl�sico para una p�gina din�mica de lado servidor: El servidor va a reconocer la extensi�n correspondiente a la p�gina PHP (phtml, php, php4,...) y antes de enviarla al navegador va a encargarse de interpretar y ejecutar todo aquello que se encuentre entre las etiquetas correspondientes al lenguaje PHP. El resto, lo enviara sin m�s ya que, asumir� que se trata de c�digo HTML absolutamente comprensible por el navegador.

Otra caracter�stica general de los scripts en PHP es la forma de separar las distintas instrucciones. Para hacerlo, hay que acabar cada instrucci�n con un punto y coma ";". Para la ultima expresi�n, la que va antes del cierre de etiqueta, este formalismo no es necesario.

Incluimos tambi�n en este capitulo la sintaxis de comentarios. Un comentario, para aquellos que no lo sepan, es una frase o palabra que nosotros incluimos en el c�digo para comprenderlo m�s f�cilmente al volverlo a leer un tiempo despu�s y que, por supuesto, el ordenador tiene que ignorar ya que no va dirigido a �l sino a nosotros mismos. Los comentarios tienen una gran utilidad ya que es muy f�cil olvidarse del funcionamiento de un script programado un tiempo atr�s y resulta muy �til si queremos hacer r�pidamente comprensible nuestro c�digo a otra persona.

Pues bien, la forma de incluir estos comentarios es variable dependiendo si queremos escribir una l�nea o m�s. Veamos esto con un primer ejemplo de script:

<?
$mensaje="Tengo hambre!!"; //Comentario de una linea
echo $mensaje; #Este comentario tambi�n es de una linea
/*En este caso
mi comentario ocupa
varias lineas, lo ves? */
?>
Ejecutar script


Si usamos doble barra (//) o el s�mbolo # podemos introducir comentarios de una l�nea. Mediante /* y */ creamos comentarios multil�nea. Por supuesto, nada nos impide de usar estos �ltimos en una sola l�nea.

No os preocup�is si no comprend�is el texto entre las etiquetas, todo llegar�. Os adelantamos que las variables en PHP se definen anteponiendo un s�mbolo de d�lar ($) y que la instrucci�n echo sirve para sacar en pantalla lo que hay escrito a continuaci�n.

Recordamos que todo el texto insertado en forma de comentario es completamente ignorado por el servidor. Resulta importante acostumbrarse a dejar comentarios, es algo que se agradece con el tiempo.


Variables en PHP

En el manual de p�ginas din�micas hemos introducido el concepto de variable. En el cap�tulo anterior coment�bamos que, para PHP, las variables eran definidas anteponiendo el s�mbolo d�lar ($) al nombre de la variable que est�bamos definiendo.

Dependiendo de la informaci�n que contenga, una variable puede ser considerada de uno u otro tipo:

Variables num�ricas
Almacenan cifras
Enteros $entero=2002; Numeros sin decimales
Real $real=3.14159; Numeros con o sin decimal


Variables alfanum�ricas
Almacenan textos compuestos de n�meros y/o cifras
Cadenas Almacenan variables alfanum�ricas $cadena="Hola amigo";


Tablas
Almacenan series de informaciones num�ricas y/o alfanum�ricas
Arrays Son las variables que guardan las tablas $sentido[1]="ver";
$sentido[2]="tocar";
$sentido[3]="oir";
$sentido[4]="gusto";
$sentido[5]="oler";


Objetos
Se trata de conjuntos de variables y funciones asociadas. Presentan una complejidad mayor que las variables vistas hasta ahora pero su utilidad es m�s que interesante.


A diferencia de otros lenguajes, PHP posee una gran flexibilidad a la hora de operar con variables. En efecto, cuando definimos una variable asign�ndole un valor, el ordenador le atribuye un tipo. Si por ejemplo definimos una variable entre comillas, la variable ser� considerada de tipo cadena:

$variable="5"; //esto es una cadena


Sin embargo si pedimos en nuestro script realizar una operaci�n matem�tica con esta variable, no obtendremos un mensaje de error sino que la variable cadena ser� asimilada a num�rica:

<?
$cadena="5"; //esto es una cadena
$entero=3; //esto es un entero
echo $cadena+$entero
?>
Ejecutar script


Este script dar� como resultado "8". La variable cadena ha sido asimilada en entero (aunque su tipo sigue siendo cadena) para poder realizar la operaci�n matem�tica. Del mismo modo, podemos operar entre variables tipo entero y real. No debemos preocuparnos de nada, PHP se encarga durante la ejecuci�n de interpretar el tipo de variable necesario para el buen funcionamiento del programa.

Sin embargo, en contraste, hay que tener cuidado en no cambiar may�sculas por min�sculas ya que, en este sentido, PHP es sensible. Conviene por lo tanto trabajar ya sea siempre en may�sculas o siempre en min�sculas para evitar este tipo de malentendidos a veces muy dif�ciles de localizar.

Variables asignadas por referencia

En PHP tambi�n podemos asignar variables por referencia. En ese caso no se les asigna un valor, sino otra variable, de tal modo que las dos varialbles comparten espacio en memoria para el mismo dato.

La notaci�n para asignar por referencia es colocar un "&" antes del nombre de la variable.

<?php
$foo = 'Bob'; // Asigna el valor 'Bob' a $foo
$bar = &$foo; // Referencia $foo v�a $bar.
$bar = "Mi nombre es $bar"; // Modifica $bar...
echo $foo; // $foo tambi�n se modifica.
echo $bar;
?>


Esto dar� como resultado la visualizaci�n dos veces del string "Mi nombre es Bob". Algo como:

Mi nombre es BobMi nombre es Bob


Cambio del tipo de las variables en PHP

PHP no requiere que indiquemos el tipo que va a contener una variable, sino que lo deduce del valor que asignemos a la variable. Asimismo, se encarga de actualizar autom�ticamente el tipo de la variable cada vez que le asignamos un nuevo valor.

Por ello, para cambiar el tipo de una variable simplemente le asignamos un valor con un nuevo tipo.

Nota: Se excluyen en este caso el cambio de variables a tipo Array porque la sintaxis puede resultar ambigua al expresar ese c�digo, es decir, puede darse el caso de que una l�nea de c�digo pueda significar dos cosas.

$a = "1";
//$a es una cadena
$a[0] = "f";
//�Estamos editando el �ndice de la cadena o forzando a array?


Forzado

En cualquier caso, podemos forzar una variable para que cambie de tipo con la funci�n setType().

setType($variable,"nuevo_tipo");


la funci�n setType() actualiza el tipo de $variable a "nuevo_tipo" y devuelve un boleano indicando si hubo �xito o no en la conversi�n.

Entre "nuevo_tipo" tenemos:

� "integer"
� "double"
� "string"
� "array"
� "object"


Tambi�n podemos hacer que una variable se comporte como un tipo determinado forz�ndola, de la misma manera a como se hace en el lenguaje C.

$variable = "23";
$variable = (int) $variable;


Los forzados permitidos son:

� (int), (integer) - fuerza a entero (integer)
� (real), (double), (float) - fuerza a doble (double)
� (string) - fuerza a cadena (string)
� (array) - fuerza a array (array)
(object) - fuerza a objeto (object)




Variables de sistema en PHP

Dada su naturaleza de lenguaje de lado servidor, PHP es capaz de darnos acceso a toda una serie de variables que nos informan sobre nuestro servidor y sobre el cliente. La informaci�n de estas variables es atribuida por el servidor y en ning�n caso nos es posible modificar sus valores directamente mediante el script. Para hacerlo es necesario influir directamente sobre la propiedad que definen.

Existen multitud de variables de este tipo, algunas sin utilidad aparente y otras realmente interesantes y con una aplicaci�n directa para nuestro sitio web. Aqu� os enumeramos algunas de estas variables y la informaci�n que nos aportan:

Variable Descripci�n
$HTTP_USER_AGENT Nos informa principalmente sobre el sistema operativo y tipo y versi�n de navegador utilizado por el internauta. Su principal utilidad radica en que, a partir de esta informaci�n, podemos redireccionar nuestros usuarios hacia p�ginas optimizadas para su navegador o realizar cualquier otro tipo de acci�n en el contexto de un navegador determinado.
$HTTP_ACCEPT_LANGUAGE Nos devuelve la o las abreviaciones de la lengua considerada como principal por el navegador. Esta lengua o lenguas principales pueden ser elegidas en el men� de opciones del navegador. Esta variable resulta tambi�n extremadamente �til para enviar al internauta a las p�ginas escritas en su lengua, si es que existen.
$HTTP_REFERER Nos indica la URL desde la cual el internauta ha tenido acceso a la p�gina. Muy interesante para generar botones de "Atr�s" din�micos o para crear nuestros propios sistemas de estad�sticas de visitas.
$PHP_SELF Nos devuelve una cadena con la URL del script que est� siendo ejecutado. Muy interesante para crear botones para recargar la p�gina.
$HTTP_GET_VARS Se trata de un array que almacena los nombres y contenidos de las variables enviadas al script por URL o por formularios GET
$HTTP_POST_VARS Se trata de un array que almacena los nombres y contenidos de las variables enviadas al script por medio de un formulario POST
$HTTP_COOKIES_VARS Se trata de un array que almacena los nombres y contenidos de las cookies. Veremos qu� son m�s adelante.
$PHP_AUTH_USER Almacena la variable usuario cuando se efect�a la entrada a p�ginas de acceso restringido. Combinado con $PHP_AUTH_PW resulta ideal para controlar el acceso a las p�ginas internas del sitio.
$PHP_AUTH_PW Almacena la variable password cuando se efect�a la entrada a p�ginas de acceso restringido. Combinado con $PHP_AUTH_USER resulta ideal para controlar el acceso a las p�ginas internas del sitio.
$REMOTE_ADDR Muestra la direcci�n IP del visitante.
$DOCUMENT_ROOT Nos devuelve el path f�sico en el que se encuentra alojada la p�gina en el servidor.
$PHPSESSID Guarda el identificador de sesi�n del usuario. Veremos m�s adelante en qu� consisten las sesiones.


No todas estas variables est�n disponibles en la totalidad de servidores o en determinadas versiones de un mismo servidor. adem�s, algunas de ellas han de ser previamente activadas o definidas por medio de alg�n acontecimiento. As�, por ejemplo, la variable $HTTP_REFERER no estar� definida a menos que el internauta acceda al script a partir de un enlace desde otra p�gina.

Variables superglobales

A partir de PHP 4.1.0, se dispone de un conjunto de varibles de tipo array que mantienen informaci�n del sistema, llamadas superglobales porque se definen autom�ticamente en un �mbito global.

Estas variables hacen referencia a las mismas que se acced�an antes por medio de los arrays del tipo $HTTP_*_VARS. �stas todav�a existen, aunque a partir de PHP 5.0.0 se pueden desactivar con la directiva register_long_arrays.

La lista de estas variables, extra�da directamente de la documentaci�n de PHP es la siguiente:

$GLOBALS
Contiene una referencia a cada variable disponible en el espectro de las variables del script. Las llaves de esta matriz son los nombres de las variables globales. $GLOBALS existe dese PHP 3.

$_SERVER
Variables definidas por el servidor web � directamente relacionadas con el entorno en don el script se esta ejecutando. An�loga a la antigua matriz $HTTP_SERVER_VARS (la cual est� todav�a disponible, aunque no se use).

$_GET
Variables proporcionadas al script por medio de HTTP GET. An�loga a la antigua matriz $HTTP_GET_VARS (la cual est� todav�a disponible, aunque no se use).

$_POST
Variables proporcionadas al script por medio de HTTP POST. An�loga a la antigua matriz $HTTP_POST_VARS (la cual est� todav�a disponible, aunque no se use).

$_COOKIE
Variables proporcionadas al script por medio de HTTP cookies. An�loga a la antigua matriz $HTTP_COOKIE_VARS (la cual est� todav�a disponible, aunque no se use).

$_FILES
Variables proporcionadas al script por medio de la subida de ficheros via HTTP . An�loga a la antigua matriz $HTTP_POST_FILES (la cual est� todav�a disponible, aunque no se use). Vea tambi�n Subiendo ficheros por m�todo POST para m�s informaci�n.

$_ENV
Variables proporcionadas al script por medio del entorno. An�loga a la antigua matriz $HTTP_ENV_VARS (la cual est� todav�a disponible, aunque no se use).

$_REQUEST
Variables proporcionadas al script por medio de cuaquier mecanismo de entrada del usuario y por lo tanto no se puede confiar en ellas. La presencia y el orden en que aparecen las variables en esta matriz es definido por la directiva de configuraci�n variables_order. Esta matriz no tiene un an�logo en versiones anteriores a PHP 4.1.0. Vea tambi�n import_request_variables().

$_SESSION
Variables registradas en la sesi�n del script. An�loga a la antigua matriz $HTTP_SESSION_VARS (la cual est� todav�a disponible, aunque no se use). Vea tambi�n la secci�n Funciones para el manejo de sessiones para m�s informaci�n.


Tablas o Arrays en PHP

Un tipo de variable que ya hemos descrito pero puede ser relativamente complicado a asimilar con respecto a la mayor�a son los arrays. Un array es una variable que est� compuesta de varios elementos cada uno de ellos catalogado dentro de ella misma por medio de una clave.

En el cap�tulos anteriores pon�amos el ejemplo de un array llamado sentido que conten�a los distintos sentidos del ser humano:

$sentido[1]="ver";
$sentido[2]="tocar";
$sentido[3]="oir";
$sentido[4]="gustar";
$sentido[5]="oler";


En este caso este array cataloga sus elementos, comunmente llamados valores, por n�meros. Los n�meros del 1 al 5 son por lo tanto las claves y los sentidos son los valores asociados. Nada nos impide emplear nombres (cadenas) para clasificarlos. Lo �nico que deberemos hacer es entrecomillarlos:

<?
$moneda["espana"]="Peseta";
$moneda["francia"]="Franco";
$moneda["usa"]="Dolar";
?>


Otra forma de definir id�nticamente este mismo array y que nos puede ayudar para la creaci�n de arrays m�s complejos es la siguiente sintaxis:

<?
$moneda=array("espana"=> "Peseta","francia" => "Franco","usa" => "Dolar");
?>


Una forma muy practica de almacenar datos es mediante la creaci�n de arrays multidimensionales (tablas). Pongamos el ejemplo siguiente: Queremos almacenar dentro de una misma tabla el nombre, moneda y lengua hablada en cada pa�s. Para hacerlo podemos emplear un array llamado pa�s que vendr� definido por estas tres caracter�sticas (claves). Para crearlo, deber�amos escribir una expresi�n del mismo tipo que la vista anteriormente en la que meteremos una array dentro del otro. Este proceso de incluir una instruccion dentro de otra se llama anidar y es muy corriente en programaci�n:

<?
$pais=array
(
"espana" =>array
   (
   "nombre"=>"Espa�a",
   "lengua"=>"Castellano",
   "moneda"=>"Peseta"
   ),
"francia" =>array
   (
   "nombre"=>"Francia",
   "lengua"=>"Franc�s",
   "moneda"=>"Franco"
   )
);
echo $pais["espana"]["moneda"] //Saca en pantalla: "Peseta"
?>
Ejecutar script


Antes de entrar en el detalle de este peque�o script, comentemos algunos puntos referentes a la sintaxis. Como puede verse, en esta secuencia de script, no hemos introducido punto y coma ";" al final de cada l�nea. Esto es simplemente debido a que lo que hemos escrito puede ser considerado como una sola instrucci�n. En realidad, somos nosotros quienes decidimos cortarla en varias l�neas para, as�, facilitar su lectura. La verdadera instrucci�n acabar�a una vez definido completamente el array y es precisamente ah� donde hemos colocado el �nico punto y coma. Por otra parte, pod�is observar c�mo hemos jugado con el tabulador para separar unas l�neas m�s que otras del principio. Esto tambi�n lo hacemos por cuestiones de claridad, ya que nos permite ver qu� partes del c�digo est�n incluidas dentro de otras. Es importante acostumbrarse a escribir de esta forma del mismo modo que a introducir los comentarios ya que la claridad de los scripts es fundamental a la hora de depurarlos. Un poco de esfuerzo a la hora de crearlos puede ahorrarnos muchas horas a la hora de corregirlos o modificarlos meses m�s tarde.

Pasando ya al comentario del programa, como pod�is ver, �ste nos permite almacenar tablas y, a partir de una simple petici�n, visualizarlas un determinado valor en pantalla.

Lo que es interesante es que la utilidad de los arrays no acaba aqu�, sino que tambi�n podemos utilizar toda una serie de funciones creadas para ordenarlos por orden alfab�tico directo o inverso, por claves, contar el numero de elementos que componen el array adem�s de poder movernos por dentro de �l hacia delante o atr�s.

Muchas son las funciones propuestas por PHP para el tratamiento de arrays, no vamos a entrar aqu� en una descripci�n de las mismas. S�lo incluiremos esta peque�a tabla que puede ser complementada, si necesario, con la documentaci�n que ya hemos mencionado.

Funci�n Descripci�n
array_values (mi_array) Lista los valores contenidos en mi_array
asort(mi_array) y arsort(mi_array) Ordena por orden alfab�tico directo o inverso en funci�n de los valores
count(mi_array) Nos da el numero de elementos de nuestro array
ksort(mi_array) y krsort(mi_array) Ordena por orden alfab�tico directo o inverso en funci�n de las claves
list ($variable1, $variable2...)=mi_array Asigna cada una variable a cada uno de los valores del array
next(mi_array), prev(mi_array), reset(mi_array) y end(mi_array) Nos permiten movernos por dentro del array con un puntero hacia delante, atras y al principio y al final.
each(mi_array) Nos da el valor y la clave del elemento en el que nos encontramos y mueve al puntero al siguiente elemento.


De gran utilidad es tambi�n el bucle foreach que recorre de forma secuencial el array de principio a fin.


Trabajo con tablas o arrays en PHP

Vamos a ver varios ejemplos de trabajo con arrays (arreglos, vectores, matrices o tablas en castellano) en PHP que ilustrar�n un poco el funcionamiento de algunas de las funciones de arrays m�s populares que trae consigo PHP.

Sin m�s, vamos a introducirnos en materia con varios ejemplos interesantes de manejo de vectores.

Referencia: Los arrays en PHP se explican en el art�culo Tablas o Arrays en PHP.

Modificar el n�mero de elementos de un array

Ahora vamos a ver varios ejemplos mediante los cuales nuestros arrays pueden aumentar o reducir el n�mero de casillas disponibles.

Reducir el tama�o de un array

array_slice()
Para disminuir el n�mero de casillas de un arreglo tenemos varias funciones. Entre ellas, array_slice() la utilizamos cuando queremos recortar algunas casillas del arreglo, sabiendo los �ndices de las casillas que deseamos conservar.

Recibe tres par�metros. El array, el �ndice del primer elemento y el n�mero de elementos a tomar, siendo este �ltimo par�metro opcional.

En el ejemplo siguiente tenemos un array con cuatro nombres propios. En la primera ejecuci�n de array_slice() estamos indicando que deseamos tomar todos los elementos desde el �ndice 0 (el principio) hasta un n�mero total de 3 elementos.

El segundo array_slice() indica que se tomen todos los elementos a partir del �ndice 1 (segunda casilla).

<?
$entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//modifico el tama�o
$salida = array_slice ($entrada, 0, 3);
//muestro el array
foreach ($salida as $actual)
    echo $actual . "<br>";

echo "<p>";

//modifico otra vez
$salida = array_slice ($salida, 1);
//muestro el array
foreach ($salida as $actual)
    echo $actual . "<br>";
?>


Tendr� como salida:

Miguel
Pepe
Juan

Pepe
Juan

array_shift()
Esta funci�n extrae el el primer elemento del array y lo devuelve. Adem�s, acorta la longitud del array eliminando el elemento que estaba en la primera casilla. Siempre hace lo mismo, por tanto, no recibir� m�s que el array al que se desea eliminar la primera posici�n.

En el c�digo siguiente se tiene el mismo vector con nombres propios y se ejecuta dos veces la funci�n array_shift() eliminando un elemento en cada ocasi�n. Se imprimen los valores que devuelve la funci�n y los elementos del array resultante de eliminar la primera casilla.

<?
$entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//quito la primera casilla
$salida = array_shift ($entrada);
//muestro el array
echo "La funci�n devuelve: " . $salida . "<br>";
foreach ($entrada as $actual)
    echo $actual . "<br>";

echo "<p>";

//quito la primera casilla, que ahora ser�a la segunda del array original
$salida = array_shift ($entrada);
echo "La funci�n devuelve: " . $salida . "<br>";
//muestro el array
foreach ($entrada as $actual)
    echo $actual . "<br>";
?>


Da como resultado:

La funci�n devuelve: Miguel
Pepe
Juan
Julio
Pablo

La funci�n devuelve: Pepe
Juan
Julio
Pablo

unset()
Se utiliza para destruir una variable dada. En el caso de los arreglos, se puede utilizar para eliminar una casilla de un array asociativo (los que no tienen �ndices num�ricos sino que su �ndice es una cadena de caracteres).

Veamos el siguiente c�digo para conocer c�mo definir un array asociativo y eliminar luego una de sus casillas.

<?
$estadios_futbol = array("Barcelona"=> "Nou Camp","Real Madrid" => "Santiago Bernabeu","Valencia" => "Mestalla","Real Sociedad" => "Anoeta");

//mostramos los estadios
foreach ($estadios_futbol as $indice=>$actual)
    echo $indice . " -- " . $actual . "<br>";

echo "<p>";

//eliminamos el estadio asociado al real madrid
unset ($estadios_futbol["Real Madrid"]);

//mostramos los estadios otra vez
foreach ($estadios_futbol as $indice=>$actual)
echo $indice . " -- " . $actual . "<br>";
?>


La salida ser� la siguiente:

Barcelona -- Nou Camp
Real Madrid -- Santiago Bernabeu
Valencia -- Mestalla
Real Sociedad -- Anoeta

Barcelona -- Nou Camp
Valencia -- Mestalla
Real Sociedad -- Anoeta

Aumentar el tama�o de un array

Tenemos tambi�n a nuestra disposici�n varias funciones que nos pueden ayudar a aumentar el n�mero de casillas de un arreglo.

array_push()
Inserta al final del array una serie de casillas que se le indiquen por par�metro. Por tanto, el n�mero de casillas del array aumentar� en tantos elementos como se hayan indicado en el par�metro de la funci�n. Devuelve el n�mero de casillas del array resultante.

Veamos este c�digo donde se crea un arreglo y se a�aden luego tres nuevos valores.

<?
$tabla = array ("Lagartija", "Ara�a", "Perro", "Gato", "Rat�n");

//aumentamos el tama�o del array
array_push($tabla, "Gorri�n", "Paloma", "Oso");

foreach ($tabla as $actual)
    echo $actual . "<br>";
?>


Da como resultado esta salida:

Lagartija
Ara�a
Perro
Gato
Rat�n
Gorri�n
Paloma
Oso

array_merge()
Ahora vamos a ver c�mo unir dos arrays utilizando la funci�n array_merge(). A �sta se le pasan dos o m�s arrays por par�metro y devuelve un arreglo con todos los campos de los vectores pasados.

En este c�digo de ejemplo creamos tres arrays y luego los unimos con la funci�n array_merge()

<?
$tabla = array ("Lagartija", "Ara�a", "Perro", "Gato", "Rat�n");
$tabla2 = array ("12","34","45","52","12");
$tabla3 = array ("Sauce","Pino","Naranjo","Chopo","Perro","34");

//aumentamos el tama�o del array
$resultado = array_merge($tabla, $tabla2, $tabla3);

foreach ($resultado as $actual)
    echo $actual . "<br>";
?>


Da como resultado:

Lagartija
Ara�a
Perro
Gato
Rat�n
12
34
45
52
12
Sauce
Pino
Naranjo
Chopo
Perro
34

Una �ltima cosa. Tambi�n pueden introducirse nuevas casillas en un arreglo por los m�todos habituales de asignar las nuevas posiciones en el array a las casillas que necesitemos.

En arrays normales se har�a as�:

$tabla = array ("Sauce","Pino","Naranjo");
$tabla[3]="Algarrobo";


En arrays asociativos:

$estadios_futbol = array("Valencia" => "Mestalla","Real Sociedad" => "Anoeta");
$estadios_futbol["Barcelona"]= "Nou Camp";


Veremos m�s adelante otras posibilidades del trabajo con arrays.

Ponemos a vuestra disposici�n las p�ginas PHP que contienen los c�digos con los que hemos trabajado.


Cadenas

Una de las variables m�s corrientes a las que tendremos que hacer frente en la mayor�a de nuestros scripts son las cadenas, que no son m�s que informaci�n de car�cter no num�rico (textos, por ejemplo).

Para asignar a una variable un contenido de este tipo, lo escribiremos entre comillas dando lugar a declaraciones de este tipo:

$cadena="Esta es la informaci�n de mi variable"

Si queremos ver en pantalla el valor de una variable o bien un mensaje cualquiera usaremos la instrucci�n echo como ya lo hemos visto anteriormente:

echo $cadena //sacar�a "Esta es la informaci�n de mi variable"

echo "Esta es la informaci�n de mi variable" //dar�a el mismo resultado

Podemos yuxtaponer o concatenar varias cadenas poniendo para ello un punto entre ellas:

<?
$cadena1="Perro";
$cadena2=" muerde";
$cadena3=$cadena1.$cadena2;
echo $cadena3 //El resultado es: "Perro muerde"
?>

Ejecutar script

Tambi�n podemos introducir variables dentro de nuestra cadena lo cual nos puede ayudar mucho en el desarrollo de nuestros scripts. Lo que veremos no es el nombre, sino el valor de la variable:

<?
$a=55;
$mensaje="Tengo $a a�os";
echo $mensaje //El resultado es: "Tengo 55 a�os"
?>
Ejecutar script

La pregunta que nos podemos plantear ahora es...�C�mo hago entonces para que en vez del valor "55" me salga el texto "$a"? En otras palabras, c�mo se hace para que el s�mbolo $ no defina una variable sino que sea tomado tal cual. Esta pregunta es tanto m�s interesante cuanto que en algunos de scripts este s�mbolo debe ser utilizado por una simple raz�n comercial (pago en d�lares por ejemplo) y si lo escribimos tal cual, el ordenador va a pensar que lo que viene detr�s es una variable siendo que no lo es.

Pues bien, para meter �ste y otros caracteres utilizados por el lenguaje dentro de las cadenas y no confundirlos, lo que hay que hacer es escribir una contrabarra delante:

Car�cter Efecto en la cadena
\$ Escribe d�lar en la cadena
\" Escribe comillas en la cadena
\\ Escribe contrabarra en la cadena
\8/2 Escribe 8/2 y no 4 en la cadena


Adem�s, existen otras utilidades de esta contrabarra que nos permiten introducir en nuestro documento HTML determinados eventos:

Car�cter Efecto en la cadena
\t Introduce una tabulaci�n en nuestro texto
\n Cambiamos de l�nea
\r Retorno de carro


Estos cambios de l�nea y tabulaciones tienen �nicamente efecto en el c�digo y no en el texto ejecutado por el navegador. En otras palabras, si queremos que nuestro texto ejecutado cambie de l�nea hemos de introducir un echo "<br>" y no echo "\n" ya que este ultimo s�lo cambia de l�nea en el archivo HTML creado y enviado al navegador cuando la p�gina es ejecutada en el servidor. La diferencia entre estos dos elementos puede ser f�cilmente comprendida mirando el c�digo fuente producido al ejecutar este script:

<HTML>
<HEAD>
<TITLE>cambiolinea.php</TITLE>
</HEAD>
<BODY>
<?
echo "Hola, \n sigo en la misma l�nea ejecutada pero no en c�digo fuente.<br>Ahora cambio de l�nea ejecutada pero continuo en la misma en el c�digo fuente."
?>
</BODY>
</HTML>
Ejecutar script
Echar un vistazo al codigo fuente del navegador

El c�digo fuente que observar�amos seria el siguiente:

<HTML>
<HEAD>
<TITLE>cambiolinea.php</TITLE>
</HEAD>
<BODY>
Hola,
 sigo en la misma l�nea ejecutada pero no en c�digo fuente.<br>Ahora cambio de l�nea ejecutada pero continuo en la misma en el c�digo fuente.</BODY>
</HTML>


Las cadenas pueden asimismo ser tratadas por medio de funciones de todo tipo. Veremos estas funciones m�s adelante con m�s detalle. Tan s�lo debemos retener que existen muchas posibles acciones que podemos realizar sobre ellas: Dividirlas en palabras, eliminar espacios sobrantes, localizar secuencias, remplazar caracteres especiales por su correspondiente en HTML o incluso extraer las etiquetas META de una p�gina web.


Funciones en PHP

En nuestro manual de p�ginas din�micas vimos el concepto de funci�n. Vimos que la funci�n podr�a ser definida como un conjunto de instrucciones que explotan ciertas variables para realizar una tarea m�s o menos elemental.

PHP basa su eficacia principalmente en este tipo de elemento. Una gran librer�a que crece constantemente, a medida que nuevas versiones van surgiendo, es complementada con las funciones de propia cosecha dando como resultado un sinf�n de recursos que son aplicados por una simple llamada.

Las funciones integradas en PHP son muy f�ciles de utilizar. Tan s�lo hemos de realizar la llamada de la forma apropiada y especificar los par�metros y/o variables necesarios para que la funci�n realice su tarea.

Lo que puede parecer ligeramente m�s complicado, pero que resulta sin lugar a dudas muy pr�ctico, es crear nuestras propias funciones. De una forma general, podr�amos crear nuestras propias funciones para conectarnos a una base de datos o crear los encabezados o etiquetas meta de un documento HTML. Para una aplicaci�n de comercio electr�nico podr�amos crear por ejemplo funciones de cambio de una moneda a otra o de calculo de los impuestos a a�adir al precio de articulo. En definitiva, es interesante crear funciones para la mayor�a de acciones m�s o menos sistem�ticas que realizamos en nuestros programas.

Aqu� daremos el ejemplo de creaci�n de una funci�n que, llamada al comienzo de nuestro script, nos crea el encabezado de nuestro documento HTML y coloca el titulo que queremos a la p�gina:

<?
function hacer_encabezado($titulo)
{
$encabezado="<html>\n<head>\n\t<title>$titulo</title>\n</head>\n";
echo $encabezado;
}
?>

Esta funci�n podr�a ser llamada al principio de todas nuestras p�ginas de la siguiente forma:

$titulo="Mi web";
hacer_encabezado($titulo);

De esta forma automatizamos el proceso de creaci�n de nuestro documento. Podr�amos por ejemplo incluir en la funci�n otras variables que nos ayudasen a construir la etiquetas meta y de esta forma, con un esfuerzo m�nimo, crear�amos los encabezados personalizados para cada una de nuestras p�ginas. De este mismo modo nos es posible crear cierres de documento o formatos diversos para nuestros textos como si se tratase de hojas de estilo que tendr�an la ventaja de ser reconocidas por todos los navegadores.

Por supuesto, la funci�n ha de ser definida dentro del script ya que no se encuentra integrada en PHP sino que la hemos creado nosotros. Esto en realidad no pone ninguna pega ya que puede ser incluida desde un archivo en el que iremos almacenando las definiciones de las funciones que vayamos creando o recopilando.

Estos archivos en los que se guardan las funciones se llaman librer�as. La forma de incluirlos en nuestro script es a partir de la instrucci�n require o include:

require("libreria.php") o include("libreria.php")

En resumen, la cosa quedar�a as�:

Tendr�amos un archivo libreria.php como sigue

<?
//funci�n de encabezado y colocaci�n del titulo
Function hacer_encabezado($titulo)
{
$encabezado="<html>\n<head>\n\t<title>$titulo</title>\n</head>\n";
echo $encabezado;
}
?>

Por otra parte tendr�amos nuestro script principal p�gina.php (por ejemplo):

<?
include("libreria.php");
$titulo="Mi Web";
hacer_encabezado($titulo);
?>
<body>
El cuerpo de la p�gina
</body>
</html>
Ejecutar script
Echar un vistazo al codigo fuente del navegador

Podemos meter todas las funciones que vayamos encontrando dentro de un mismo archivo pero resulta much�simo m�s ventajoso ir clasific�ndolas en distintos archivos por tem�tica: Funciones de conexi�n a bases de datos, funciones comerciales, funciones generales, etc. Esto nos ayudara a poder localizarlas antes para corregirlas o modificarlas, nos permite tambi�n cargar �nicamente el tipo de funci�n que necesitamos para el script sin recargar �ste en exceso adem�s de permitirnos utilizar un determinado tipo de librer�a para varios sitios webs distintos.

Tambi�n puede resultar muy pr�ctico el utilizar una nomenclatura sistem�tica a la hora de nombrarlas: Las funciones comerciales podr�an ser llamadas com_loquesea, las de bases de datos bd_loquesea, las de tratamiento de archivos file_loquesea. Esto nos permitir� reconocerlas enseguida cuando leamos el script sin tener que recurrir a nuestra oxidada memoria para descubrir su utilidad.

No obstante, antes de lanzarnos a crear nuestra propia funci�n, merece la pena echar un vistazo a la documentaci�n para ver si dicha funci�n ya existe o podemos aprovecharnos de alguna de las existentes para aligerar nuestro trabajo. As�, por ejemplo, existe una funci�n llamada header que crea un encabezado HTML configurable lo cual nos evita tener que crearla nosotros mismos.

Como puede verse, la tarea del programador puede en algunos casos parecerse a la de un coleccionista. Hay que ser paciente y met�dico y al final, a base de trabajo propio, intercambio y tiempo podemos llegar poseer nuestro peque�o tesoro.

Ejemplo de funci�n

Vamos a ver un ejemplo de creaci�n de funciones en PHP. Se trata de hacer una funci�n que recibe un texto y lo escribe en la p�gina con cada car�cter separado por "-". Es decir, si recibe "hola" debe escribir "h-o-l-a" en la p�gina web.

Nota: Para comprender este ejemplo necesitamos conocer el bucle for, que se explica en el cap�tulo Control del flujo en PHP: Bucles II.

La manera de realizar esta funci�n ser� recorrer el string, caracter a caracter, para imprimir cada uno de los caracteres, seguido de el signo "-". Recorreremos el string con un bucle for, desde el carater 0 hasta el n�mero de caracteres total de la cadena.

El n�mero de caracteres de una cadena se obtiene con la funci�n predefinida en PHP strlen(), que recibe el string entre par�ntesis y devuelve el n�mero de los caracteres que tenga.

<html>
<head>
    <title>funcion 1</title>
</head>

<body>

<?
function escribe_separa($cadena){
    for ($i=0;$i<strlen($cadena);$i++){
       echo $cadena[$i];
       if ($i<strlen($cadena)-1)
          echo "-";
    }
}

escribe_separa ("hola");
echo "<p>";
escribe_separa ("Texto m�s largo, a ver lo que hace");
?>
</body>
</html>


La funci�n que hemos creado se llama escribe_separa y recibe como par�metro la cadena que hay que escribir con el separador "-". El bucle for nos sirve para recorrer la cadena, desde el primer al �ltimo caracter. Luego, dentro del bucle, se imprime cada caracter separado del signo "-". El if que hay dentro del bucle for comprueba que el actual no sea el �ltimo caracter, porque en ese caso no habr�a que escribir el signo "-" (queremos conseguir "h-o-l-a" y si no estuviera el if obtendr�amos "h-o-l-a-").

En el c�digo mostrado se hacen un par de llamadas a la funci�n para ver el resultado obtenido con diferentes cadenas como par�metro. Podemos ver el script en marcha.


M�s sobre funciones: paso de par�metros

Vamos a explicar algunos detalles adicionales sobre la definici�n y uso de funciones, para ampliar el art�culo de funciones en php.

Paso de par�metros

Los par�metros son los datos que reciben las funciones y que utilizan para realizar las operaciones de la funci�n. Una funci�n puede recibir cualquier n�mero de par�metros, incluso ninguno. A la hora de definir la funci�n, en la cabecera, se definen los par�metros que va a recibir.

function f1 ($parametro1, $par�metro2)

As� definimos una funci�n llamada f1 que recibe dos par�metros. Como se puede observar, no se tiene que definir el tipo de datos de cada par�metro.

Los par�metros tienen validez durante la ejecuci�n de la funci�n, es decir, tienen un �mbito local a la funci�n donde se est�n recibiendo. Cuando la funci�n se termina, los par�metros dejan de existir.

Los par�metros se pasan por valor

El paso de par�metros en PHP se realiza por valor. "Por valor" es una manera t�pica de pasar par�metros en funciones, quiere decir que el cambio de un dato de un par�metro no actualiza el dato de la variable que se pas� a la funci�n. Por ejemplo, cuando invocamos una funci�n pasando una variable como par�metro, a pesar de que cambiemos el valor del par�metro dentro de la funci�n, la variable original no se ve afectada por ese cambio. Puede que se vea mejor con un ejemplo:

function porvalor ($parametro1){
$parametro1="hola";
echo "<br>" . $parametro1; //imprime "hola"
}

$mivariable = "esto no cambia";
porvalor ($mivariable);
echo "<br>" . $mivariable; //imprime "esto no cambia"


Esta p�gina tendr� como resultado:

hola
esto no cambia

Paso de par�metros por referencia

En contraposici�n al paso de par�metros por valor, est� el paso de par�metros por referencia. En este �ltimo caso, el cambio del valor de un par�metro dentro de una funci�n s� afecta al valor de la variable original.

Podemos pasar los par�metros por referencia si, en la declaraci�n de la funci�n, colocamos un "&" antes del par�metro.

<?
function porreferencia(&$cadena)
{
$cadena = 'Si cambia';
}
$str = 'Esto es una cadena';
porreferencia ($str);
echo $str; // Imprime 'Si cambia'
?>


Este script mostrar� por pantalla 'Si cambia'.

Par�metros por defecto

Podemos definir valores por defecto para los par�metros. Los valores por defecto sirven para que los par�metros contengan un dato predefinido, con el que se inicializar�n si no se le pasa ning�n valor en la llamada de la funci�n. Los valores por defecto se definen asignando un dato al par�metro al declararlo en la funci�n.

function pordefecto ($parametro1="pepe";$parametro2=3)

Para la definici�n de funci�n anterior, $parametro1 tiene como valor por defecto "pepe", mientras que $parametro2 tiene 3 como valor por defecto.

Si llamamos a la funci�n sin indicar valores a los par�metros, estos tomar�n los valores asignados por defecto:

pordefecto () // $parametro1 vale "pepe" y $parametro2 vale 3

Si llamamos a la funci�n indicando un valor, este ser� tenido en cuenta para el primer par�metro.

pordefecto ("hola") // $parametro1 vale "hola" y $parametro2 vale 3

Atenci�n, estamos obligados a declarar todos los par�metros con valores por defecto al final.


M�s sobre funciones: Retorno de valores

Las funciones pueden retornar valores. Para ello se utiliza la palabra "return" indicando a continuaci�n el dato o variable que tienen que retornar. La funci�n puede tener m�ltiples return, aunque s�lo devolver� datos por uno de ellos cada vez porque, cuando se llama a return, se termina la ejecuci�n de la funci�n devolviendo el dato indicado.

Ejemplo de funci�n IVA

Vamos a ver un nuevo ejemplo para ilustrar el funcionamiento de una funci�n un poco m�s avanzada, que utiliza parte de los nuevos conceptos introducidos en este art�culo.

Se trata de hacer una funci�n que calcula el IVA y que recibe dos par�metros. Uno el valor sobre el que se calcula y el otro el porcentaje a aplicar. Si no se indica el porcentaje de IVA se entiende que es el 16%.

<html>
<head>
   <title>ejemplo IVA</title>
</head>

<body>
<?
function iva($base,$porcentaje=16){
   return $base * $porcentaje /100;
}

echo iva(1000) . "<br>";
echo iva(1000,7) . "<br>";
echo iva(10,0) . "<br>";
?>

</body>
</html>


Si se han entendido bien los conceptos, este ejemplo no puede resultar dif�cil. La funci�n recibe un par�metro llamado $porcentaje con 16 como valor por defecto. Devuelve el porcentaje dado aplicado a la base tambi�n indicada por par�metro.

As� pues, en la primera ejecuci�n de la funci�n, como no se indica el porcentaje, se mostrar� el 16% de 1000. En la segunda, se muestra el 7% de mil y en la tercera, el 0% de 10.

Puede verse el resultado en una p�gina aparte. http://www.desarrolloweb.com/articulos/ejemplos/php/ej_iva.php

Retornar m�ltiples valores

Una funci�n devuelve un �nico valor. Si queremos hacer que se puedan devolver varios valores distintos tenemos que recurrir a un truco que consiste en devolver un array.

function small_numbers()
{   
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();


list() se usa para asignar una lista de variables en una sola operaci�n. Despu�s de esa operaci�n, $zero valdr� 0, $one valdr� 1 y $two valdr� 2.


Control del flujo en PHP: Condiciones IF

La programaci�n exige en muchas ocasiones la repetici�n de acciones sucesivas o la elecci�n de una determinada secuencia y no de otra dependiendo de las condiciones espec�ficas de la ejecuci�n.

Como ejemplo, podr�amos hacer alusi�n a un script que ejecute una secuencia diferente en funci�n del d�a de la semana en el que nos encontramos.

Este tipo de acciones pueden ser llevadas a cabo gracias a una paleta de instrucciones presentes en la mayor�a de los lenguajes. En este cap�tulo describiremos someramente algunas de ellas propuestas por PHP y que resultan de evidente utilidad.

Para evitar el complicar el texto, nos limitaremos a introducir las m�s importantes dejando de lado otras cuantas que podr�n ser f�cilmente asimilables a partir de ejemplos pr�cticos.

Las condiciones if
Cuando queremos que el programa, llegado a un cierto punto, tome un camino concreto en determinados casos y otro diferente si las condiciones de ejecuci�n difieren, nos servimos del conjunto de instrucciones if, else y elseif. La estructura de base de este tipo de instrucciones es la siguiente:

if (condici�n)
{
   Instrucci�n 1;
   Instrucci�n 2;
   ...
}
else
{
   Instrucci�n A;
   Instrucci�n B;
   ...
}

Llegados a este punto, el programa verificar� el cumplimiento o no de la condici�n. Si la condici�n es cierta las instrucciones 1 y 2 ser�n ejecutadas. De lo contrario (else), las instrucciones A y B ser�n llevadas a cabo.

Esta estructura de base puede complicarse un poco m�s si tenemos cuenta que no necesariamente todo es blanco o negro y que muchas posibilidades pueden darse. Es por ello que otras condiciones pueden plantearse dentro de la condici�n principal. Hablamos por lo tanto de condiciones anidadas que tendr�an una estructura del siguiente tipo:

if (condici�n1)
{
   Instrucci�n 1;
   Instrucci�n 2;
   ...
}
else
{
   if (condici�n2)
   {
      Instrucci�n A;
      Instrucci�n B;
      ...
   }
   else
   {
      Instrucci�n X
      ...
   }
}

De este modo podr�amos introducir tantas condiciones como queramos dentro de una condici�n principal.

De gran ayuda es la instrucci�n elseif que permite en una sola l�nea introducir una condici�n adicional. Este tipo de instrucci�n simpifica ligeramente la sintaxis que acabamos de ver:

if (condici�n1)
{
   Instrucci�n 1;
   Instrucci�n 2;
   ...
}
elseif (condici�n2)
{
   Instrucci�n A;
   Instrucci�n B;
   ...
}
else
{
   Instrucci�n X
   ...
}

El uso de esta herramienta resultar� claro con un poco de pr�ctica. Pongamos un ejemplo sencillo de utilizaci�n de condiciones. El siguiente programa permitir�a detectar la lengua empleada por el navegador y visualizar un mensaje en dicha lengua.

<HTML>
<HEAD>
<TITLE>Detector de Lengua</TITLE>
</HEAD>
<BODY>
<?
//Antes de nada introducimos mensajes en forma de variables
$espanol="Hola";
$ingles="Hello";
$frances="Bonjour";

//Ahora leemos del navegador cu�l es su lengua oficial
$idioma=substr($HTTP_ACCEPT_LANGUAGE,0,2);

//Formulamos las posibilidades que se pueden dar
if ($idioma == "es")
{echo "$espanol";}
elseif ($idioma=="fr")
{echo "$frances";}
else
{echo "$ingles";}
?>
</BODY>
</HTML>
Ejecutar script

Para poder ver el funcionamiento de este script es necesario cambiar el idioma preferido lo cual puede ser realizado a partir del men� de opciones del navegador.

Para leer la lengua aceptada por el navegador lo que hacemos es definir una variable ($idioma) y, mediante la funci�n substr, recogemos las dos primeras letras del c�digo correspondiente al idioma aceptado por el navegador ($HTTP_ACCEPT_LANGUAGE).

La tercera parte de script se encarga de ver si el navegador est� en espa�ol (es), franc�s (fr) o en cualquier otro idioma que no sea ninguno de estos dos y de imprimir el mensaje que proceda en cada caso.

A notar que, cuando se trata de comparar variables, ponemos un doble igual "==" en lugar de un simple "=". Este �ltimo queda reservado exclusivamente para asignar valores a variables


Control del flujo en PHP: Bucles I

Los ordenadores, como cualquier m�quina, est�n dise�ados para realizar tareas repetitivas. Es por ello que nuestros programas pueden aprovecharse de este principio para realizar una determinada secuencia de instrucciones un cierto n�mero de veces. Para ello, utilizamos las estructuras llamadas en bucle que nos ayudan a, usando unas pocas l�neas, realizar una tarea incluida dentro del bucle un cierto numero de veces definido por nosotros mismos.

PHP propone varios tipos de bucle cada uno con caracter�sticas especificas:

Bucle while

Sin duda el bucle m�s utilizado y el m�s sencillo. Lo usamos para ejecutar las instrucciones contenidas en su interior siempre y cuando la condici�n definida sea verdadera. La estructura sint�ctica es la siguiente.

while (condici�n)
{
   instruccion1;
   instruccion2;
   ...
}

Un ejemplo sencillo es este bucle que aumenta el tama�o de la fuente en una unidad a cada nueva vuelta por el bucle:

<?
$size=1;
While ($size<=6)
{
   echo"<font size=$size>Tama�o $size</font><br>\n";
   $size++;
}
?>
Ejecutar script

A modo de explicaci�n, diremos que, antes de nada, hemos de definir el valor de la variable que vamos a evaluar en la condici�n. Algo absolutamente obvio pero f�cil de olvidar. En este caso le hemos atribuido un valor de 1 que corresponde a la letra m�s peque�a.

El paso siguiente es crear el bucle en el que imponemos la condici�n que la variable no exceda el valor de 6.

La instrucci�n a ejecutar ser� imprimir en nuestro documento un c�digo HTML en el que la etiqueta font y el mensaje que contiene var�an a medida que $size cambia su valor.

El siguiente paso es incrementar en una unidad el valor de $size. Esto se puede hacer con una expresi�n como la mostrada en el bucle ($size++) que en realidad es sin�nima de:

$size=$size+1

Veremos otras de estas abreviaciones m�s adelante.

Otro ejemplo del buble While

El bucle while se suele utiliza cuando no se sabe exactamente cuantas iteraciones se deben realizar antes de acabar. Vamos a utilizarlo en otro ejemplo, en el que hay que recorrer una cadena hasta encontrar un car�cter dado. Si lo encuentra, escribir su posici�n. Si no, escribir que no se ha encontrado.

Nota: Para hacer este ejercicio necesitamos conocer la funci�n de cadena strlen(), que obtiene la longitud de la cadena que se le pase por par�metro.

int strlen (string cad)
Devuelve un entero igual a la longitud de la cadena.

<?
$cadena = "hola a todo el mundo";

//recorro la cadena hasta encontrar una "m"
$i=0;
while ($cadena[$i]!="m" && $i< strlen($cadena)){
    $i++;
}

if ($i==strlen($cadena))
    echo "No se encuentra...";
else
    echo "Est� en la posici�n $i";
?>

En este ejemplo se define una cadena con el valor "hola a todo el mundo". Posteriormente se recorre esa cadena hasta el final de la cadena o hasta encontrar el caracter "m", utilizando una variable $i que lleva la cuenta de los caracteres recorridos.

Al final del bucle while, si se sali� porque se encontr� el caracter "m", la variable $i valdr� un n�mero menor que la longitud de la cadema. Si se sali� por llegar al final de la cadena, la variable $i valdr� lo mismo que la longitud en caracteres de esa cadena. En el condicional simplemente se comprueba si $i vale o no lo mismo que la longitud de la cadena, mostrando los mensajes adecuados en cada caso.

Podemos ver el ejemplo en funcionamiento.

Bucle do/while

Este tipo de bucle no difiere en exceso del anterior. La sintaxis es la siguiente:

do
{
   instruccion1;
   instruccion2;
   ...
}
while (condici�n)

La diferencia con respecto a los bucles while es que este tipo de bucle eval�a la condici�n al final con lo que, incluso siendo falsa desde el principio, �ste se ejecuta al menos una vez.


Control del flujo en PHP: Bucles II

Bucle for
PHP est� provisto de otros tipos de bucle que tambi�n resultan muy pr�cticos en determinadas situaciones. El m�s popular de ellos es el bucle for que, como para los casos anteriores, se encarga de ejecutar las instrucciones entre llaves. La diferencia con los anteriores radica en c�mo se plantea la condici�n de finalizaci�n del bucle. Para aclarar su funcionamiento vamos a expresar el ejemplo de bucle while visto en el cap�tulo anterior en forma de bucle for:

<?
For ($size=1;$size<=6;$size++)
{
   echo"<font size=$size>Tama�o $size</font><br>\n";
}
?>

Ejecutar script

Las expresiones dentro del par�ntesis definen respectivamente:

-Inicializaci�n de la variable. Valida para la primera vuelta del bucle.

-Condici�n de evaluaci�n a cada vuelta. Si es cierta, el bucle continua.

-Acci�n a realizar al final de cada vuelta de bucle.

Bucle foreach
Este bucle, implementado en las versiones de PHP4, nos ayuda a recorrer los valores de un array lo cual puede resultar muy �til por ejemplo para efectuar una lectura r�pida del mismo. Recordamos que un array es una variable que guarda un conjunto de elementos (valores) catalogados por claves.

La estructura general es la siguiente:

Foreach ($array as $clave=>$valor)
{
   instruccion1;
   instruccion2;
   �;
}

Un ejemplo pr�ctico es la lectura de un array lo cual podr�a hacerse del siguiente modo:

<?
$moneda=array("Espa�a"=> "Peseta","Francia" => "Franco","USA" => "Dolar");
Foreach ($moneda as $clave=>$valor)
{
   echo "Pais: $clave Moneda: $valor<br>";
}
?>
Ejecutar script

Este script se encargar�a de mostrarnos por pantalla el contenido del array $moneda. No resultar�a mala idea crear una funci�n propia basada en este bucle que nos permitiese visualizar arrays monodimensionales y almacenarla en nuestra librer�a. Esta funci�n podr�a ser definida de esta forma:

Function mostrar_array ($array)
{
Foreach ($array as $clave=>$valor)
{echo "$clave=>$valor<br>";}
}

Break y continue
Estas dos instrucciones se introducen dentro de la estructura y nos sirven respectivamente para escapar del bucle o saltar a la iteraci�n siguiente. Pueden resultarnos muy pr�cticas en algunas situaciones.


Operadores

Las variables, como base de informaci�n de un lenguaje, pueden ser creadas, modificadas y comparadas con otras por medio de los llamados operadores. En los cap�tulos anteriores hemos utilizado en nuestros ejemplos algunos de ellos.

En este cap�tulo pretendemos listar los m�s importantes y as� dar constancia de ellos para futuros ejemplos.

Operadores aritm�ticos
Nos permiten realizar operaciones num�ricas con nuestras variables

+ Suma
- Resta
* Multiplicaci�n
/ Divisi�n
% Devuelve el resto de la divisi�n

Referencia: El operador aritm�tico que puede resultar m�s desconocido para los lectores es el operador %. Explicamos con mayor detenimiento su funcionamiento y un ejemplo en el que es �til en el taller: Listas de elementos con colores alternos en PHP.

Operadores de comparaci�n
Se utilizan principalmente en nuestras condiciones para comparar dos variables y verificar si cumple o no la propiedad del operador.

== Igualdad
!= Desigual
< Menor que
<= Menor igual que
> Mayor que
>= Mayor igual que


Operadores l�gicos
Se usan en combinaci�n con los operadores de comparaci�n cuando la expresi�n de la condici�n lo requiere.

And Y
Or O
! No


Operadores de incremento
Sirven para aumentar o disminuir de una unidad el valor de una variable

++$variable Aumenta de 1 el valor de $variable
--$variable Reduce de uno el valor de $variable


Operadores combinados
Una forma habitual de modificar el valor de las variables es mediante los operadores combinados:

$variable += 10 Suma 10 a $variable
$variable -= 10 Resta 10 a $variable
$variable .= "a�ado" Concatena las cadenas $variable y "a�ado"


Este tipo de expresiones no son m�s que abreviaciones de otras formas m�s cl�sicas:

$variable += 10

es lo mismo que:

$variable = $variable+10


Pasar variables por la URL

Bucles y condiciones son muy �tiles para procesar los datos dentro de un mismo script. Sin embargo, en un sitio Internet, las p�ginas vistas y los scripts utilizados son numerosos. Muy a menudo necesitamos que nuestros distintos scripts est�n conectados unos con otros y que se sirvan de variables comunes. Por otro lado, el usuario interacciona por medio de formularios cuyos campos han de ser procesados para poder dar una respuesta. Todo este tipo de factores din�micos han de ser eficazmente regulados por un lenguaje como PHP.

Es posible que ya os hay�is percatado de que las variables de un script tienen una validez exclusiva para el script y que nos resulta imposible conservar su valor cuando ejecutamos otro archivo distinto aunque ambos est�n enlazados. Existen varias formas de enviar las variables de una p�gina a otra de manera a que la p�gina destino reconozca el valor asignado por el script de origen:

Pasar variables por URL

Para pasar las variables de una p�gina a otra lo podemos hacer introduciendo dicha variable dentro del enlace hipertexto de la p�gina destino. La sintaxis ser�a la siguiente:

<a href="destino.php?variable1=valor1&variable2=valor2&...">Mi enlace</a>

Pod�is observar que estas variables no poseen el s�mbolo $ delante. Esto es debido a que en realidad este modo de pasar variables no es espec�fico de PHP sino que es utilizado por otros lenguajes.

Ahora nuestra variable pertenece tambi�n al entorno de la p�gina destino.php y est� lista para su explotaci�n.

Nota: No siempre se definen autom�ticamente las variables recibidas por par�metro en las p�ginas web, depende de una variable de configuraci�n de PHP: register_globals, que tiene que estar activada para que as� sea. Ver comentarios del art�culo al final de la p�gina para m�s informaci�n.

Para aclarar posibles dudas, veamos esto en forma de ejemplo. Tendremos pues dos p�ginas, origen.html (no es necesario darle extensi�n PHP puesto que no hay ning�n tipo de c�digo) y destino.php:

<HTML>
<HEAD>
<TITLE>origen.html</TITLE>
</HEAD>
<BODY>
<a href="destino.php?saludo=hola&texto=Esto es una variable texto">Paso variables saludo y texto a la p�gina destino.php</a>
</BODY>
</HTML>

<HTML>
<HEAD>
<TITLE>destino.php</TITLE>
</HEAD>
<BODY>
<?
echo "Variable \$saludo: $saludo <br>\n";
echo "Variable \$texto: $texto <br>\n"
?>
</BODY>
</HTML>
Ejecutar ejemplo

$HTTP_GET_VARS

Recordamos que es posible recopilar en una variable tipo array el conjunto de variables que han sido enviadas al script por este m�todo a partir de la variable de sistema $HTTP_GET_VARS, que es un array asociativo. Utiliz�ndolo quedar�a as�:

<?
echo "Variable \$saludo: $HTTP_GET_VARS["saludo"] <br>\n";
echo "Variable \$texto: $HTTP_GET_VARS["texto"] <br>\n"
?>

Nota: Aunque podamos recoger variables con este array asociativo o utilizar directamente las variables que se definen en nuestra p�gina, resulta m�s seguro utilizar $HTTP_GET_VARS por dos razones, la primera que as� nos aseguramos que esa varible viene realmente de la URL y la segunda, que as� nuestro c�digo ser� m�s claro cuando lo volvamos a leer, porque quedar� especificado que esa variable estamos recibi�ndola por la URL.

$_GET

A partir de la versi�n 4.1.0 de PHP se ha introducido el array asociativo $_GET, que es id�ntico a $HTTP_GET_VARS, aunque un poco m�s corto de escribir.


Procesar variables de formularios

Este tipo de transferencia es de gran utilidad ya que nos permite interaccionar directamente con el usuario.

El proceso es similar al explicado para las URLs. Primeramente, presentamos una primera p�gina con el formulario cl�sico a rellenar y las variables son recogidas en una segunda p�gina que las procesa:

Nota: No siempre se definen autom�ticamente las variables recibidas por el formulario en las p�ginas web, depende de una variable de configuraci�n de PHP: register_globals, que tiene que estar activada para que as� sea. Ver comentarios del art�culo al final de la p�gina para m�s informaci�n.

<HTML>
<HEAD>
<TITLE>formulario.html</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="destino2.php">
Nombre<br>
<INPUT TYPE="TEXT" NAME="nombre"><br>
Apellidos<br>
<INPUT TYPE="TEXT" NAME="apellidos"><br>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>

<HTML>
<HEAD>
<TITLE>destino2.php</TITLE>
</HEAD>
<BODY>
<?
echo "Variable \$nombre: $nombre <br>\n";
echo "Variable \$apellidos: $apellidos <br>\n"
?>
</BODY>
</HTML>

Ejecutar ejemplo

$HTTP_POST_VARS

Recordamos que es posible recopilar en una variable tipo array el conjunto de variables que han sido enviadas al script por este m�todo a partir de la variable de sistema $HTTP_POST_VARS.

echo "Variable \$nombre: " . $HTTP_POST_VARS["nombre"] . "<br>\n";

Nota: Aunque podamos recoger variables con este array asociativo o utilizar directamente las variables que se definen en nuestra p�gina, resulta m�s seguro utilizar $HTTP_POST_VARS por dos razones, la primera que as� nos aseguramos que esa varible viene realmente de un formulario y la segunda, que as� nuestro c�digo ser� m�s claro cuando lo volvamos a leer, porque quedar� especificado que esa variable estamos recibi�ndola por un formulario.

$_POST

A partir de PHP 4.1.0 se pueden recoger las variables de formulario utilizando tambi�n el array asociativo $_POST, que es el mismo que $HTTP_POST_VARS, pero m�s corto de escribir.

Ejemplo de restricci�n de acceso por edad

Para continuar aportando ejemplos al uso de formularios vamos a realizar una p�gina que muestra solicita la edad del visitante y, dependiendo de dicha edad, permita o no visualizar el contenido de la web. A los mayores de 18 a�os se les permite ver la p�gina y a los menores no.

El ejemplo es muy sencillo y no valdr�a tal cual est� para utilizarlo a modo de una verdadera restricci�n de acceso. �nicamente nos sirve para saber c�mo obtener datos de un formulario y como tratarlos para realizar una u otra acci�n, dependiendo de su valor.

La p�gina del formulario, que hemos llamado edad.php tendr�a esta forma:

<html>
<head>
  <title>Restringir por edad</title>
</head>

<body>

<form action="edad2.php" method="post">
Escribe tu edad: <input type="text" name="edad" size="2">
<input type="submit" value="Entrar">
</form>

</body>
</html>

Esta es una p�gina sin ning�n c�digo PHP, simplemente tiene un formulario. Fij�monos en el action del formulario, que est� dirigido hacia una p�gina llamada edad2.php, que es la que recibir� el dato de la edad y mostrar� un contenido u otro dependiendo de ese valor. Su c�digo es el siguiente:

<html>
<head>
   <title>Restringir por edad</title>
</head>

<body>

<?
$edad = $_POST["edad"];
echo "Tu edad: $edad<p>";

if ($edad < 18) {
   echo "No puedes entrar";
}else{
   echo "Bienvenido";
}
?>
</body>
</html>

Esperamos que este otro c�digo tampoco resulte extra�o. Simplemente se recibe la edad, utilizando el array $_POST. Luego se muestra la edad y se ejecuta una expresi�n condicional en funci�n de que la edad sea menor que 18. En caso positivo (edad menor que 18), se muestra un mensaje que informa de que no se deja acceder al p�gina. En caso negativo (mayor o igual a 18) se muestra un mensaje de bienvenida.

Podemos ver el ejemplo en funcionamiento.


Autollamada de p�ginas

Al incluir un formulario en una p�gina se debe indicar, a trav�s del atributo action, el nombre del archivo PHP al que enviaremos los datos escritos en el formulario. De este modo, para un esquema de env�o de datos por formulario, pueden participar dos p�ginas: una que contiene el formulario y otra que recibe los datos de dicho formulario.

Lo mismo ocurre cuando enviamos variables por una URL. Tenemos una p�gina que contendr� el enlace y otra p�gina que recibir� y tratar� esos datos para mostrar unos resultados.

En el presente art�culo vamos a ver c�mo se puede enviar y recibir datos de un formulario con una �nica p�gina. Asimismo, veremos como en la misma p�gina podemos tener enlaces con paso de variables por URL y adem�s, podemos recoger y tratar esos datos con la misma p�gina. A este efecto podemos llamarte "autollamada de p�ginas", tambi�n se le suele llamar como "Formularios reentrantes" o t�rminos similares. Es muy interesante conocer el modo de funcionamiento de estos scripts, porque ser�n muy habituales en nuestras p�ginas PHP y ayudan mucho a tener los c�digos ordenados.

En ambos casos, para formularios o env�o de datos por la URL, se debe seguir un esquema como este:

- Comprobar si recibo datos por URL o por formulario
- Si no recibo datos
  - Muestro el formulario o los enlaces que pasan variables.
- Si recibo datos
  - Entonces tengo que procesar el formulario o las variables de la URL

Para un formulario

Veamos a continuaci�n como ser�a el c�digo de un formulario reentrante.

<html>
<head>
    <title>Me llamo a mi mismo...</title>
</head>

<body>
<?
if (!$_POST){
?>
    <form action="auto-llamada.php" method="post">
    Nombre: <input type="text" name="nombre" size="30">
    <br>
    Empresa: <input type="text" name="empresa" size="30">
    <br>
    Telefono: <input type="text" name="telefono" size=14 value="+34 " >
    <br>
    <input type="submit" value="Enviar">
    </form>
<?
}else{
    echo "<br>Su nombre: " . $_POST["nombre"];
    echo "<br>Su empresa: " . $_POST["empresa"];
    echo "<br>Su Tel�fono: " . $_POST["telefono"];
}
?>
</body>
</html>


En el ejemplo, el primer paso es conocer si se est�n recibiendo o no datos por un formulario. Para ello se comprueba con un enunciado if si existe o no una variable $_POST.

En concreto if (!$_POST) querr�a decir algo como "Si no existen datos venidos de un formulario". En caso de que no existan, muestro el formulario. En caso de que s� existan, recojo los datos y los imprimo en la p�gina.

Se puede ver el ejemplo en funcionamiento en una p�gina aparte.

Para paso de variables por URL

La idea es la misma. Comprobar con un enunciado if si se reciben o no datos desde una URL. Veamos el c�digo a continuaci�n. Se trata de una p�gina que muestra una serie de enlaces para ver las tablas de multiplicar de el 1 hasta el 10. Cada uno de los enlaces muestra una tabla de multiplicar. Pulsando el primer enlace podemos ver la tabla del 1, pulsando el segundo la tabla del 2, etc.

Recordemos que la p�gina se llama a si misma. Para comprenderla m�s f�cilmente ser� interesante verla en funcionamiento.

<html>
<head>     <title>Tablas de multiplicar</title>
</head>

<body>
<?
if (!$_GET){
    for ($i=1;$i<=10;$i++){
       echo "<br><a href='ver_tabla.php?tabla=$i'>Ver la tabla del $i</a>\n";
    }
} else {
    $tabla=$_GET["tabla"];
?>
    <table align=center border=1 cellpadding="1">
<?
    for ($i=0;$i<=10;$i++){
       echo "<tr><td>$tabla X $i</td><td>=</td><td>" . $tabla * $i . "</td></tr>\n";
    }
?>
    </table>
<?
}
?>
</body>
</html>


Este c�digo es un poco m�s complicado, porque hace un poco m�s de cosas que el anterior, pero para el asunto que nos ocupa que es la autollamada de p�ginas, todo sigue igual de simple.

Hay que fijarse en el if que comprueba si se reciben o no datos por URL: if (!$_GET), que querr�a decir algo como "Si no se reciben variables por la URL".

En caso positivo (no se reciben datos por URL) se muestran los enlaces para ver cada una de las tablas y en caso de que s� se reciban datos, se muestra la tabla de multiplicar del n�mero que se est� recibiendo en la URL.

Para hacer para mostrar los enlaces y las tablas de multiplicar se utilizan bucles for, que esperamos que no resulten desconocidos para el lector. Puede conocerse algo m�s sobre los bucles for en Control del flujo en PHP: Bucles II.


Utilizaci�n de las cookies

Sin duda este t�rmino resultara familiar para muchos. Algunos lo habr�n le�do u o�do pero no saben de qu� se trata. Otros sin embargo sabr�n que las cookies son unas informaciones almacenadas por un sitio web en el disco duro del usuario. Esta informaci�n es almacenada en un archivo tipo texto que se guarda cuando el navegador accede al sitio web.

Referencia: Una explicaci�n de las cookies m�s detallada se puede encontrar en el art�culo Qu� son las cookies, publicado en DesarrolloWeb.com.

Es posible, por supuesto, ver estos archivos. Para abrirlos hay que ir al directorio C:\Windows\Cookies para los usuarios de IE 4+ o a C:\...\Netscape\Users\defaultuser para usuarios de Netscape. Como podr�is comprobar, en la mayor�a de los casos la informaci�n que se puede obtener es indescifrable.

La utilidad principal de las cookies es la de poder identificar al navegador una vez �ste visita el sitio por segunda vez y as�, en funci�n del perfil del cliente dado en su primera visita, el sitio puede adaptarse din�micamente a sus preferencias (lengua utilizada, colores de pantalla, formularios rellenados total o parcialmente, redirecci�n a determinadas p�ginas...).

Para crear un archivo cookies, modificar o generar una nueva cookie lo podemos hacer a partir de la funci�n SetCookie:

setcookie("nombre_de_la_cookie",valor,expiracion);

Pongamos un ejemplo sencillo. Imaginemos que queremos introducir en una variable cookie el nombre del visitante. El nombre ha podido ser previamente recogido por un formulario tal y como hemos visto:

setcookie("persona",$nombre,time()+86400*365);

De este modo hemos creado una cookie llamada persona que tiene como valor el contenido de la variable $nombre y tendr� una duraci�n de 1 a�o a partir de su creaci�n (el tiempo time() actual en segundos sumado a un a�o en segundos).

Es importante que la creaci�n de la cookie sea previa a la apertura del documento HTML. En otras palabras, las llamadas a la funci�n setcookie() deben ser colocadas antes de la etiqueta HTML.

Por otra parte, es interesante se�alar que el hecho de que definir una cookie ya existente implica el borrado de la antigua. Del mismo modo, el crear una primera cookie conlleva la generaci�n autom�tica del archivo texto.

Para utilizar el valor de la cookie en nuestros scripts tan s�lo tendremos que llamar la variable que define la cookie. �Realmente sencillo!

Hay que tener cuidado sin embargo de no definir variables en nuestro script con el mismo nombre que las cookies puesto que PHP privilegiar� el contenido de la variable local con respecto a la cookie y no dar� un mensaje de error. Esto nos puede conducir a errores realmente dif�ciles de detectar.

Recordamos que es posible recopilar en una variable tipo array el conjunto de cookies almacenadas en el disco duro del internauta mediante la variable de servidor $HTTP_COOKIE_VARS

Las cookies son una herramienta fant�stica para personalizar nuestra p�gina pero hay que ser cautos ya que, por una parte, no todos los navegadores las aceptan y por otra, se puede deliberadamente impedir al navegador la creaci�n de cookies. Es por ello que resultan un complemento y no una fuente de variables infalible para nuestro sitio.


Sesiones I

En los programas que hemos visto hasta ahora, hemos utilizado variables que s�lo exist�an en el archivo que era ejecutado. Cuando carg�bamos otra p�gina distinta, los valores de estas variables se perd�an a menos que nos tom�semos la molestia de pasarlos por la URL o inscribirlos en las cookies o en un formulario para su posterior explotaci�n. Estos m�todos, aunque �tiles, no son todo lo pr�cticos que podr�an en determinados casos en los que la variable que queremos conservar ha de ser utilizada en varios scripts diferentes y distantes los unos de los otros.

Podr�amos pensar que ese problema puede quedar resuelto con las cookies ya que se trata de variables que pueden ser invocadas en cualquier momento. El problema, ya lo hemos dicho, es que las cookies no son aceptadas ni por la totalidad de los usuarios ni por la totalidad de los navegadores lo cual implica que una aplicaci�n que se sirviera de las cookies para pasar variables de un archivo a otro no ser�a 100% infalible. Es importante a veces pensar en "la inmensa minor�a", sobre todo en aplicaciones de comercio electr�nico donde debemos captar la mayor cantidad de clientes posibles y nuestros scripts deben estar preparados ante cualquier eventual deficiencia del navegador del cliente.

Nos resulta pues necesario el poder declarar ciertas variables que puedan ser reutilizadas tantas veces como queramos dentro de una misma sesi�n. Imaginemos un sitio multiling�e en el que cada vez que queremos imprimir un mensaje en cualquier p�gina necesitamos saber en qu� idioma debe hacerse. Podr�amos introducir un script identificador de la lengua del navegador en cada uno de los archivos o bien declarar una variable que fuese valida para toda la sesi�n y que tuviese como valor el idioma reconocido en un primer momento.

Pensemos tambi�n en un carrito de la compra de una tienda virtual donde el cliente va navegando por las p�ginas del sitio y a�adiendo los art�culos que quiere comprar a un carrito. Este carrito podr�a ser perfectamente una variable de tipo array (tabla) que almacena para cada referencia la cantidad de art�culos contenidos en el carrito. Esta variable deber�a ser obviamente conservada continuamente a lo largo de todos los scripts.

Este tipo de situaciones son solventadas a partir de las variables de sesi�n. Una sesi�n es considerada como el intervalo de tiempo empleado por un usuario en recorrer nuestras p�ginas hasta que abandona nuestro sitio o deja de actuar sobre �l durante un tiempo prolongado o bien, sencillamente, cierra el navegador.

PHP nos permite almacenar variables llamadas de sesi�n que, una vez definidas, podr�n ser utilizadas durante este lapso de tiempo por cualquiera de los scripts de nuestro sitio. Estas variables ser�n especificas del usuario de modo que varias variables sesi�n del mismo tipo con distintos valores pueden estar coexistiendo para cada una de las sesiones que est�n teniendo lugar simult�neamente. Estas sesiones tienen adem�s su propio identificador de sesi�n que ser� �nico y espec�fico.

Algunas mejoras referentes al empleo de sesiones han sido introducidas con PHP4. Es a esta nueva versi�n a la que haremos referencia a la hora de explicar las funciones disponibles y la forma de operar. Para los programadores de PHP3 la diferencia mayor es que est�n obligados a gestionar ellos mismos las sesiones definir sus propios identificadores de sesi�n.

Veamos en el siguiente cap�tulo la forma de plasmar esta necesidad t�cnica en nuestros scripts a partir de las funciones que gestionan las sesiones en PHP.


Sesiones II

Hemos dicho en el cap�tulo anterior que la variables de sesi�n se diferencian de las variables cl�sicas en que �stas residen en el servidor, son especificas de un solo usuario definido por un identificador y pueden ser utilizadas en la globalidad de nuestras p�ginas.

Para iniciar una sesi�n podemos hacerlo de dos formas distintas:

-Declaramos abiertamente la apertura de sesi�n por medio de la funci�n session_start(). Esta funci�n crea una nueva sesi�n para un nuevo visitante o bien recupera la que est� siendo llevada a cabo.

-Declaramos una variable de sesi�n por medio de la funci�n session_register('variable'). Esta funci�n, adem�s de crear o recuperar la sesi�n para la p�gina en la que se incluye tambi�n sirve para introducir una nueva variable de tipo sesi�n.

Las sesiones han de ser iniciadas al principio de nuestro script. Antes de abrir cualquier etiqueta o de imprimir cualquier cosa. En caso contrario recibiremos un error.

Con lo visto, vamos a proponer el ejemplo cl�sico de utilizaci�n de una sesi�n: un contador. Este contador deber� aumentar de una unidad cada vez que recargamos la p�gina o apretamos al enlace:

<?
session_register('contador');
?>
<HTML>
<HEAD>
<TITLE>contador.php</TITLE>
</HEAD>
<BODY>
<?
If (isset($contador)==0)
{$contador=0;}
++$contador;
echo "<a href=\"contador.php\">Has recargado esta p�gina $contador veces</a>";
?>
</BODY>
</HTML>

Ejecutar script

La condici�n if tiene en cuenta la posibilidad de que la variable $contador no haya sido todav�a inicializada. La funci�n isset se encarga de dar un valor cero cuando una variable no ha sido inicializada.

Otras funciones �tiles para la gesti�n de sesiones son:

Funci�n Descripci�n
Session_id() Nos devuelve el identificador de la sesi�n
Session_destroy() Da por abandonada la sesi�n eliminando variables e identificador.
Session_unregister('variable') Abandona una variable sesi�n

Para aprender m�s sobre las sesiones, concretamente para ver una aplicaci�n que gestiona un carrito de compra por medio de variables sesi�n visita nuestro articulo del taller de PHP.

Si buscas m�s funciones o informaci�n adicional sobre las sesiones, consulta el manual oficial de PHP.


Trabajar con bases de datos en PHP

Una de las principales ventajas que presenta el trabajar con p�ginas din�micas es el poder almacenar los contenidos en bases de datos. De esta forma, podemos organizarlos, actualizarlos y buscarlos de una manera mucho m�s simple.

El lenguaje PHP, ya hemos dicho, ofrece interfaces para el acceso a la mayor�a de las bases de datos comerciales y por ODBC a todas las bases de datos posibles en sistemas Microsoft, a partir de las cuales podremos editar el contenido de nuestro sitio con absoluta sencillez.

Esta interacci�n se realiza, por un lado, a partir de las funciones que PHP nos propone para cada tipo de base de datos y, por otro estableciendo un di�logo a partir de un idioma universal: SQL (Structured Query Language) el cual es com�n a todas las bases de datos. Este lenguaje resulta, como veremos en el tutorial de SQL, muy potente y f�cil de aprender.

En este manual de PHP nos limitaremos pues a la utilizaci�n las instrucciones SQL b�sicas que ser�n aprendidas a medida que explicamos las diferentes formas de actuar sobre una base de datos dejando para el tutorial de SQL los aspectos m�s avanzados.

Como base ejemplo de estos cap�tulos hemos elegido MySQL, sin duda la base de datos m�s extendida en combinaci�n con PHP. Su gratuidad, eficiencia y simplicidad la han hecho una buena candidata.

Ya hemos explicado en cap�tulos anteriores su instalaci�n a la vez que hemos presentado los comandos de base que nos pueden permitir abordarla con una relativa facilidad.

En caso de utilizar cualquier otra base compatible, las correcciones a llevar a cabo con respecto a nuestros ejemplos no son excesivamente grandes y la lectura de esos cap�tulos sigue siendo de gran utilidad.

Una vez instalado MySQL y antes de poder comenzar con nuestros ejemplos, ser� necesario llevar a cabo las siguientes operaciones:

-Introducidos dentro de MySQL, crearemos la base de datos ejemplo con la siguiente sentencia:

create database ejemplo;

-Seleccionaremos la base ejemplo como la base a utilizar:

use ejemplo

-Crearemos a continuaci�n la tabla clientes a partir de la siguiente sentencia:

create table clientes (
nombre varchar(100),
telefono varchar(100)
);

Ahora ya disponemos de nuestra tabla vac�a. S�lo queda comenzar a llenarla con los datos que iremos insertando.

El conjunto de scripts utilizados para el bloque de bases de datos puede ser descargado aqu�.


Introducci�n de nuevos registros

Una vez creada la tabla clientes en nuestra base de datos ejemplo, el paso siguiente sea llenarla con registros.

Los datos del registro pueden ser recogidos, por ejemplo, a partir de un formulario. Aqu� os proponemos un simple documento HTML que recoge los datos y los env�a a una p�gina PHP que se encarga de procesarlos:

<HTML>
<HEAD>
<TITLE>Insertar.html</TITLE>
</HEAD>
<BODY>
<div align="center">
<h1>Insertar un registro</h1>
<br>
<FORM METHOD="POST" ACTION="insertar.php">
Nombre<br>
<INPUT TYPE="TEXT" NAME="nombre"><br>
Tel�fono<br>
<INPUT TYPE="TEXT" NAME="telefono"><br>
<INPUT TYPE="SUBMIT" value="Insertar">
</FORM>
</div>
</BODY>
</HTML>

Llegados a la p�gina destino del formulario (insertar.php), lo primero que habr� que hacer es establecer un v�nculo entre el programa y la base de datos. Esta conexi�n se lleva a cabo con la funci�n mysql_connect. A continuaci�n, deberemos generar una orden de inserci�n del registro en lenguaje SQL. Esta orden ser� ejecutada por medio de la funci�n mysql_db_query. En esta funci�n especificaremos primeramente la base de datos sobre la que queremos actuar y a continuaci�n introduciremos la sentencia SQL:

<HTML>
<HEAD>
<TITLE>Insertar.php</TITLE>
</HEAD>
<BODY>
<?
//Conexion con la base
mysql_connect("localhost","tu_user","tu_password");
//Ejecucion de la sentencia SQL
mysql_db_query("ejemplo","insert into clientes (nombre,telefono) values ('$nombre','$telefono')");
?>
<h1><div align="center">Registro Insertado</div></h1>
<div align="center"><a href="lectura.php">Visualizar el contenido de la base</a></div>
</BODY>
</HTML>
Ejecutar ejemplo

Los parametros user y password son definidos por el creador de la base. Es conveniente en un principio, al crear nuestras bases, trabajar sin ellos con lo cual dejaremos las cadenas correspondientes vacias: "".

Adem�s de la propia inserci�n, el programa avisa de la introducci�n del registro y ofrece un enlace hacia una p�gina de lectura la cual ser� comentada a continuaci�n.

No entraremos en la descripci�n de la orden SQL, para comprender m�s acerca de c�mo introducir registros, refererirse al tutorial de SQL.


Selecci�n y lectura de registros

Dentro de una base de datos, organizada por tablas, la selecci�n de una tabla entera o de un cierto numero de registros resulta una operaci�n rutinaria.

Aqu� os mostramos una forma bastante cl�sica de mostrar en pantalla a partir de un bucle los registros seleccionados por una sentencia SQL:

<HTML>
<HEAD>
<TITLE>lectura.php</TITLE>
</HEAD>
<BODY>
<h1><div align="center">Lectura de la tabla</div></h1>
<br>
<br>
<?
//Conexion con la base
mysql_connect("localhost","tu_user","tu_password");

//Ejecutamos la sentencia SQL
$result=mysql_db_query("ejemplo","select * from clientes");
?>
<table align="center">
<tr>
<th>Nombre</th>
<th>Tel�fono</th>
</tr>
<?
//Mostramos los registros
while ($row=mysql_fetch_array($result))
{
echo '<tr><td>'.$row["nombre"].'</td>';
echo '<td>'.$row["telefono"].'</td></tr>';
}
mysql_free_result($result)
?>
</table>

<div align="center">
<a href="insertar.html">A�adir un nuevo registro</a><br>
<a href="actualizar1.php">Actualizar un registro existente</a><br>
<a href="borrar1.php">Borrar un registro</a><br>
</div>

</BODY>
</HTML>
Ejecutar script

Los pasos a realizar son, en un principio, los vistos para la inserci�n de un registro: Conexi�n a la base y ejecuci�n de la sentencia. Esta vez, la informaci�n de dicha ejecuci�n ser� almacenada en una variable ($result).

El siguiente paso ser� plasmar en pantalla la informaci�n recogida en $result. Esto lo haremos mediante la funci�n mysql_fetch_array que devuelve una variable array con los contenidos de un registro a la vez que se posiciona sobre el siguiente. El bucle while nos permite leer e imprimir secuencialmente cada uno de los registros.

La funci�n mysql_free_result se encarga de liberar la memoria utilizada para llevar a cabo la consulta. Aunque no es necesaria su utilizaci�n, resulta altamente aconsejable.


Actualizacion de un registro

Para mostrar c�mo se actualiza un registro presente en nuestra base de datos, vamos a hacerlo a partir de un caso un poco m�s complejo para que empecemos a familiarizarnos con estas operaciones. Realizaremos un par de scripts que permitan cambiar el numero de tel�fono de las distintas personas presentes en nuestra base. El nombre de estas personas, as� como el nuevo numero de tel�fono, ser�n recogidos por medio de un formulario.

El archivo del formulario va a ser esta vez un script PHP en el que efectuaremos una llamada a nuestra base de datos para construir un men� desplegable donde aparezcan todos los nombres. La cosa quedar�a as�:

<HTML>
<HEAD>
<TITLE>Actualizar1.php</TITLE>
</HEAD>
<BODY>
<div align="center">
<h1>Actualizar un registro</h1>
<br>
<?
//Conexion con la base
mysql_connect("localhost","tu_user","tu_password");

echo '<FORM METHOD="POST" ACTION="actualizar2.php">Nombre<br>';

//Creamos la sentencia SQL y la ejecutamos
$sSQL="Select nombre From clientes Order By nombre";
$result=mysql_db_query("ejemplo",$sSQL);

echo '<select name="nombre">';

//Generamos el menu desplegable
while ($row=mysql_fetch_array($result))
{echo '<option>'.$row["nombre"];}
?>
</select>
<br>
Tel�fono<br>
<INPUT TYPE="TEXT" NAME="telefono"><br>
<INPUT TYPE="SUBMIT" value="Actualizar">
</FORM>
</div>

</BODY>
</HTML>

La manera de operar para construir el men� desplegable es la misma que para visualizar la tabla. De nuevo empleamos un bucle while en combinaci�n con la funci�n mysql_fetch_array lo que nos permite mostrar cada una de las opciones.

El script de actualizaci�n ser� muy parecido al de inserci�n:

<HTML>
<HEAD>
<TITLE>Actualizar2.php</TITLE>
</HEAD>
<BODY>
<?
//Conexion con la base
mysql_connect("localhost","tu_user","tu_password");

//Creamos la sentencia SQL y la ejecutamos
$sSQL="Update Clientes Set telefono='$telefono' Where nombre='$nombre'";
mysql_db_query("ejemplo",$sSQL);
?>

<h1><div align="center">Registro Actualizado</div></h1>
<div align="center"><a href="lectura.php">Visualizar el contenido de la base</a></div>

</BODY>
</HTML>
Ejecutar ejemplo



Borrado de un registro con PHP

Otra de las operaciones elementales que se pueden realizar sobre una base de datos es borrar un registro. Para hacerlo, SQL nos propone sentencias del tipo Delete. Ve�moslo con un ejemplo aplicado a nuestra agenda. Primero, crearemos un men� desplegable din�mico como para el caso de las actualizaciones:

<HTML>
<HEAD>
<TITLE>Borrar1.php</TITLE>
</HEAD>
<BODY>
<div align="center">
<h1>Borrar un registro</h1>
<br>

<?
//Conexion con la base
mysql_connect("localhost","tu_user","tu_password");

echo '<FORM METHOD="POST" ACTION="borrar2.php">Nombre<br>';

//Creamos la sentencia SQL y la ejecutamos
$sSQL="Select nombre From clientes Order By nombre";
$result=mysql_db_query("ejemplo",$sSQL);

echo '<select name="nombre">';

//Mostramos los registros en forma de men� desplegable
while ($row=mysql_fetch_array($result))
{echo '<option>'.$row["nombre"];}
mysql_free_result($result)
?>

</select>
<br>
<INPUT TYPE="SUBMIT" value="Borrar">
</FORM>
</div>

</BODY>
</HTML>

El siguiente paso es hacer efectiva la operaci�n a partir de la ejecuci�n de la sentencia SQL que construimos a partir de los datos del formulario:

<HTML>
<HEAD>
<TITLE>Borrar2.php</TITLE>
</HEAD>
<BODY>
<?
//Conexion con la base
mysql_connect("localhost","tu_user","tu_password");

//Creamos la sentencia SQL y la ejecutamos
$sSQL="Delete From Clientes Where nombre='$nombre'";
mysql_db_query("ejemplo",$sSQL);
?>

<h1><div align="center">Registro Borrado</div></h1>
<div align="center"><a href="lectura.php">Visualizar el contenido de la base</a></div>

</BODY>
</HTML>
Ejecutar ejemplo

Con este cap�tulo cerramos el bloque de accesos a bases de datos con PHP. Para mas informaci�n relacionada pod�is referiros al taller de PHP donde podr�is encontrar alg�n que otro art�culo interesante al respecto.


Subir una aplicaci�n PHP al servidor

En el pasado me solicitaron que escribiese sobre un tema que hasta ahora no hab�amos tocado m�s que de refil�n, que consiste en la puesta en marcha de una aplicaci�n, programada en local, a nuestro servidor de hosting, es decir, en el paso de subir todos los archivos PHP y la base de datos a nuestro espacio en el servidor web contratado en un proveedor de alojamiento.

El tema espero que resulte familiar a muchas de las personas que leen nuestros art�culos, ya que probablemente hayan tenido que pasar por esa etapa en alguna ocasi�n, aunque pretendo dar algunas claves y truquillos que pueden ayudar a todos, tengan o no experiencia en este asunto.

Subir los archivos

Nuestro servidor web debe tener un directorio para la publicaci�n de las p�ginas web. Ese ser�a el lugar donde hay que subir los archivos .php.

Dependiendo del proveedor con el que trabajemos, el directorio de publicaci�n puede variar. Generalmente, cuando contratamos un alojamiento, nos proporcionan una cuenta de FTP con la que conectarnos al servidor web y transferir los archivos de nuestro sitio, adem�s de unos datos para la conexi�n, que ser�n el nombre del servidor y el usuario y contrase�a para el acceso al FTP.

Referencia: por si alguien no sabe lo que es el FTP, hablamos m�s sobre ello en el manual de Publicar en Internet, concretamente en el art�culo Subir los archivos al servidor.

Al conectarnos al servidor con los datos del FTP, que deben ser proporcionados por nuestro proveedor, accederemos a un directorio. Este directorio podr�a ser el de publicaci�n, aunque generalmente no es as�, sino que suele ser un subdirectorio llamado "HTML" o "docs" o algo similar, que cuelga del directorio de inicio en nuestra conexi�n FTP. Como dec�a, este directorio puede tener nombres distintos en proveedores distintos, aunque, en cualquier caso, con una simple pregunta a nuestro proveedor resolveremos esa duda.

Los archivos se deben subir al directorio de publicaci�n, o a cualquier subdirectorio de este. En definitiva, los tendremos que alojar por ah� dentro y para acceder a ellos bastar�a con escribir el nombre del dominio o URL de nuestro alojamiento, seguido del nombre del archivo. Si tuvi�semos un archivo llamado hola.php y nuestro alojamiento se ha contratado para el dominio www.midominio.com, deber�amos subir ese archivo al directorio de publicaci�n y acceder�amos al archivo escribiendo:

http://www.midominio.com/hola.php

Si creamos subdirectorios dentro del directorio de publicaci�n podremos acceder a ellos escribiendo el nombre del dominio o URL de nuestro alojamiento, seguido del nombre del directorio y el nombre del archivo. Por ejemplo, si creamos un subdirectorio llamado paginas y tenemos dentro un archivo llamado pag1.php, podr�amos acceder a �l de la siguiente manera.

http://www.midominio.com/paginas/pag1.php

Referencia: hay otro concepto interesante que deber�amos conocer llegados a este punto, que es el "documento por defecto". �ste no es m�s que el archivo que se env�a al navegador si en la URL accedida no se especificaba ning�n archivo. Suele llamarse index.html o index.php (o index.asp si nuestro servidor soporta programaci�n en ASP), aunque puede variar de un proveedor a otro. Hablamos m�s sobre el documento por defecto en nuestro manual de Publicar en Internet.



Colocar los archivos PHP fuera del directorio de publicaci�n

Por decir algo m�s sobre el tema de colocar los archivos, quer�a se�alar que cualquier cosa que pongamos fuera del directorio de publicaci�n no podr� ser accedida a trav�s del navegador. Es decir, si creamos un directorio que se llame funciones_php en el mismo nivel que el directorio de publicaci�n (fuera del directorio de publicaci�n) no podremos acceder con el explorador a los archivos que coloquemos dentro de ninguna de las maneras. Esto es as� porque la URL de inicio de nuestro alojamiento corresponde con ese directorio y no podemos movernos hacia debajo de ese directorio con las URLs, que son la manera de especificar al navegador los recursos a los que se quiere acceder.

Referencia: Ya se explic� lo que era el directorio de publicaci�n en el cap�tulo anterior sobre Subir archivos PHP al servidor.

No ser�a posible salir del directorio de publicaci�n con una URL como esta, por mucho que utilicemos el operador .. (que sirve para acceder al directorio padre).

http://www.midominio.com/../funciones_php/archivo_inalcanzable.php

Sin embargo, colocar algunos contenidos fuera del directorio de publicaci�n puede ser muy �til. Por ejemplo, podr�amos colocar all� copias de seguridad de algunos archivos o documentos que simplemente queremos guardar en el servidor para acceder a ellos desde cualquier parte y con nuestro programa de FTP.

Hay otra utilidad m�s interesante sobre colocar archivos fuera del directorio de publicaci�n. Se trata de que muchas veces utilizamos en nuestros programas trozos de c�digo repetidamente, por ejemplo, para abrir y cerrar bases de datos, para mostrar la cabecera de nuestro portal, para comprobar que un email escrito en un formulario es correcto, etc. Es muy �til separar estos trozos de c�digo en un archivo a parte y llamar a este archivo con las funciones PHP include() o require(). As�, si un d�a modificamos la cabecera de nuestro portal, s�lo lo tendremos que modificar en un archivo, o, si cambia la base de datos que utilizamos s�lo tendr�amos que modificar el archivo que hace la conexi�n a la base de datos una vez, en lugar de ir cambi�ndolo en todas las p�ginas PHP que abr�an las bases de datos.

Estos archivos no son p�ginas independientes, sino trozos. Seguramente, si los ejecutamos por separado no mostrar�an ning�n resultado v�lido, incluso podr�an dar mensajes de error. Por esta raz�n merece la pena colocarlos en un lugar donde nadie pueda tener acceso: fuera del directorio de publicaci�n. Con PHP si que podremos acceder a ese directorio para incluir esos archivos. Solamente deber�amos utilizar las funciones PHP include() o require() indicando la ruta para acceder a los archivos.

En el caso de que tengamos una p�gina llamada hola.php en el directorio de publicaci�n y un archivo, que se llama abre_base_datos.php, en el directorio funciones_php, que est� fuera del directorio de publicaci�n, si quisi�ramos acceder (desde hola.php) al archivo que abre la base de datos lo har�amos as�.

include("../funciones_php/abre_base_datos.php")

Desde PHP s� que podemos acceder a los archivos que se encuentran fuera del directorio de publicaci�n. Para ello especificamos la ruta adecuada, en la que utilizamos el operador .. para bajar al directorio padre.

Nada m�s que decir sobre la colocaci�n de los archivos: una vez situados en el directorio de publicaci�n se podr� acceder a ellos con nuestro navegador y se deber�an ejecutar perfectamente. Aunque cabe se�alar que, tanto PHP como el servidor donde trabajemos, pueden tener configuraciones distintas y puede que alg�n detalle de la programaci�n de nuestras p�ginas no funcione correctamente.

Por ejemplo, nuestro PHP puede declarar o no autom�ticamente las variables que llegan a trav�s de un formulario. Si en local si que estaba configurado para hacer esto y en remoto no, deber�amos localizar los lugares donde recogemos las variables y utilizar las variables de entorno correctas (mirar art�culo sobre Procesar variables de formularios y los comentarios al pie para saber m�s de esta posible fuente de errores).

Aunque este no es un caso habitual, podemos ponernos en contacto con nuestro proveedor de alojamiento para ver si pueden ayudarnos configurando el sistema o indicando los pasos a seguir para solventar en nuestros scripts el asunto.

Comentario: el siguiente script calcula el nivel de directorio de los scripts que queremos incluir en la p�gina actual.

// Hallamos el nivel de directorio en que est� ubicada la p�gina
1. Se hace un recuento de los caracteres que contiene el nombre del script
actual.
-
$Chars = count_chars($PHP_SELF,1);
-
2. Exploramos la tabla de los caracteres devueltos buscando el car�cter ('/'
C�digo 47 ) de directorio (carpeta) que devuelve Apache.
-
foreach ($Chars as $Char=>$nChars){
   if ($Char==47) {$n=$nChars;break;}
}
-
3. Generamos una cadena de n-1 veces con la subcandena "../" que nos da el
nivel de directorio en que se encuentra el script.
-
if ($n==0) $PathString=""; else $PathString=str_pad("",($n-1)*3,"../");



Subir una base de datos al sevidor de Internet

Aparte de los archivos de la p�gina, debemos subir la base de datos con la que tenemos que trabajar. Las bases de datos con las que trabaja PHP son muy variadas y en distintos casos podemos utilizar una u otra, por lo que los modos de subir la base de datos tambi�n pueden variar.

Referencia: Este art�culo y los sucesivos, que tratan sobre subir una base de datos MySQL al servidor, se engloban tanto dentro del Manual de PHP como del Taller de MySQL. Por ello, ser� importante disponer de conocimientos de ambas tecnolog�as para entender y aprovechar estas explicaciones.

Es muy corriente que nuestro proveedor de hosting ofrezca junto con PHP la base de datos MySQL, as� que las notas para subir esa base de datos al servidor de este art�culo van encaminadas a ofrecer soluciones para esa base de datos.

La base de datos MySQL no se puede subir por FTP, como que se hac�a con los archivos del c�digo PHP. Para subirla tendremos que utilizar otros mecanismos. Voy a distinguir entre tres casos distintos en los que nos podr�amos encontrar en este momento:

  1. La base de datos que pretendemos subir est� vac�a. Tan s�lo hemos creado las tablas, pero no hemos introducido datos en ellas o, a lo sumo, tienen alg�n dato que hemos introducido de pruebas.
  2. La base de datos que queremos subir est� completa y es una base de datos MySQL. En este caso tenemos creada la base de datos en local y con toda la informaci�n dentro y, por supuesto, queremos que esa informaci�n quede tambi�n en la base de datos remota.
  3. La base de datos est� completa (como el caso anterior), pero no es una base de datos MySQL. En este caso estar�amos haciendo una migraci�n de la base de datos de un sistema gestor a otro.
Veremos los tres casos por separado en adelante, aunque, antes de ello, vamos a mostrar unas herramientas que nos servir�n de mucha ayuda para la administraci�n de cualquier base de datos remota.

Las herramientas en concreto se relatan en el manual Taller de MySQL, son las siguientes: En los tres casos lo que nos permite realizar el software de administraci�n son tareas sobre la base de datos de todo tipo, como pueden ser crear tablas, modificarlas, insertar datos, borrarlos, editarlos. Modificar o borrar tablas o campos de las mismas, etc.

La elecci�n de una herramieta o de otra pasa por los recursos que nos permitan utilizar en nuestro proveedor. B�sicamente, lo que nos puede decantar a una opci�n u otra, es si permiten o no conectar de manera remota la base de datos MySQL. Conozco alojamientos donde se permite esa conexi�n remota y donde no.

Si no permiten conectarnos remotamente nos decantaremos por PhpMyAdmin, pues es una aplicaci�n PHP que se conecta en local y a la que se accede desde una p�gina web y eso lo permiten todos los proveedores, incluso hay muchos que tienen instalado ya este software para administrar las bases de datos.

En caso de que s� nos permitan conectarnos remotamente con la base de datos, eligiremos MyCC o Access, que son aplicaciones Windows mucho m�s potentes y r�pidas que las que utilizan interfaz web, como PhpMyAdmin. Es preferible utilizar MyCC porque est� especialmente desarrollado para conectar y operar con bases de datos MySQL.


Subir base de datos MySQL vac�a al servidor

Es muy normal que hayamos dise�ado una base de datos para nuestro proyecto desde 0, definiendo las distintas entidades de nuestro modelo de datos, junto con sus campos y sus tipos.

En estos casos lo m�s probable es que la base de datos est� vac�a, o bien contenga datos que hayamos introducido a modo de prueba y que no queramos conservar cuando subamos la aplicaci�n a Internet.

La opci�n m�s interesante entonces podr�a ser crear otra vez las tablas que tenemos en local en la base de datos remota. Para ello tenemos dos posibilidades.

a) Si tenemos pocas tablas y bastante sencillas

Las podemos crear en remoto con alguna herramienta como PhpMyAdmin o MyCC.

b) Si tiene muchas tablas y/o muy complicadas

La recomendaci�n ser�a hacer un backup de la estructura en local y restaurarla en remoto. Esto nos evitar� tener que volver a crear todas las tablas y definir todos sus campos y sus tipos. Puede ser un poco m�s complicado pero sin duda nos ahorrar� tiempo.

Para hacer el backup de la estructura en local podemos utilizar alguna herramienta como PhpMyAdmin, o bien utilizar el comando mysqldump desde l�nea de comandos de MS-DOS.

Herramienta de backup de PhpMyAdmin
Herramienta de backup de PhpMyAdmin. Est� marcada la opci�n de extraer solamente la estructura de las tablas. Si marcamos adem�s la casilla "Send", nuestro navegador se descargar� el backup en un fichero de texto. Si no lo pulsamos simplemente se visualizar�.

Lo que tenemos que hacer en este caso es un backup de la estructura de la base de datos, es decir, los "create tables" o sentencias SQL para crear las tablas. Ser�a un mont�n de sentencias con esta forma:


# --------------------------------------------------------
#
# Table structure for table 'comentario'
#

CREATE TABLE comentario (
    id_comentario int(5) unsigned NOT NULL auto_increment,
    id_articulo int(4) DEFAULT '0' NOT NULL,
    comentario text NOT NULL,
    fecha int(14) unsigned DEFAULT '0' NOT NULL,
    revisado tinyint(1) DEFAULT '0' NOT NULL,
    nombre_comentario varchar(100) DEFAULT 'Nombre no especificado' NOT NULL,
    email_comentario varchar(100) DEFAULT 'Email sin especificar' NOT NULL,
    tipo tinyint(1) unsigned DEFAULT '1' NOT NULL,
    PRIMARY KEY (id_comentario)
);


Para restaurar estas sentencias tenemos opciones tanto dentro de PhpMyAdmin como de MyCC. En ambos casos lo que tenemos que hacer es ejecutar estas sentencias en el servidor MySQL remoto. En PhpMyAdmin tenemos un campo para introducir sentencias SQL y tambi�n otro campo para seleccionar un archivo de texto con todas las sentencias SQL, para ejecutarlas una detr�s de otra. En MyCC tenemos un bot�n que nos permite abrir una consola donde introducir una o varias sentencias SQL y ejecutarlas.


Herramienta de backup y restauraci�n de PhpMyAdmin
Herramienta de backup y restauraci�n de PhpMyAdmin

Bot�n para introducir sentencias SQL en MyCC
Bot�n para introducir sentencias SQL en MyCC

Repetimos, esto s�lo nos servir� para subir la estructura de la base de datos y no los datos que contenga. Si deseamos subir tambi�n la informaci�n de la base de datos entonces debemos utilizar otras estrategias, relatadas pr�ximamente.


Subir una base de datos MySQL con la estructura y los datos

Si la base de datos que deseamos subir est� llena de informaci�n y deseamos que se conserve una vez subida la base de datos a remoto, tenemos que realizar un backup de la base de datos y restaurarlo en remoto.

Nota: Estas recomendaciones est�n pensadas para subir una base de datos MySQL que podamos tener en local a una base de datos MySQL que hayamos contratado en remoto. Si la base origen no es MySQL estar�amos hablando de una migraci�n de bases de datos, pero esto lo veremos en un art�culo m�s adelante.

En este caso el procedimiento ser�a muy parecido al de subir una base de datos vac�a, relatado anteriormente, con la salvedad de que ahora debemos extraer no solo la estructura de la base de datos, sino tambi�n los registros que contiene.

Para ello podemos utilizar mysqldump, seg�n se relata en este art�culo, o bien PhpMyAdmin, seleccionando la opci�n que indica que el backup contenga la estructura y los datos (Structure and data en versiones en ingl�s).

La estructura y los datos vendr�n en un fichero de texto con una serie de sentencias SQL para crear las tablas y los insert necesarios para introducir cada uno de los datos.

Para restaurar la base de datos lo haremos tal como se ha relatado para el caso de que la base de datos estuviera vac�a, con la ayuda de una instalaci�n de PhpMyAdmin en remoto o un MyCC que se conecte a la base de datos contratada en el servidor de Internet.

Si tenemos problemas para subir el fichero de backup de la base de datos es posible que en nuestro proveedor de alojamiento nos pueda ayudar a subir el fichero y restaurarlo. Como el proveedor dispone de los servidores en sus propias instalaciones, tiene muchas m�s posibilidades que nosotros para trabajar con las bases de datos, sin temor a que las lentas comunicaciones por Internet arrojen errores en la restauraci�n de los datos.

Si nuestro proveedor no puede ayudarnos, seguramente disponga y nos indique alg�n mecanismo para realizar la tarea sin lugar a errores. Puede ocurrinos con alg�n proveedor que nos diga que se encarga de todo pero nos exija el pago de las horas de trabajo del inform�tico que va a restaurar el backup de la base de datos. Si no pone facilidades ni siquiera en esto posiblemente sea mejor ir pidi�ndoles que nos devuelvan el dinero invertido porque su servicio no ser�a muy bueno.


Migrar una base de datos a MySQL

El �ltimo caso en el que nos podemos encontrar a la hora de subir una base de datos a nuestro proveedor de alojamiento es que la base de datos la tengamos creada en local, pero en un sistema gestor distinto del que vamos a utilizar en remoto. En remoto suponemos siempre que vamos a utilizar la base de datos MySQL. En local podr�amos disponer de una base de datos Access, SQL Server o de otro sistema de base de datos.

El proceso de la migraci�n puede ser bastante complejo y, como hay tantas bases de datos distintas, dif�cil de dar una receta que funcione en todos los casos. Adem�s, aparte de la dificultad de transferir la informaci�n entre los dos sistemas gestores de base de datos, tambi�n nos influir� mucho en la complejidad del problema el tipo de los datos de las tablas que estamos utilizando. Por ejemplo, las fechas, los campos num�ricos con decimales o los boleanos pueden dar problemas al pasar de un sistema a otro porque pueden almacenarse de maneras distintas o, en el caso de los n�meros, con una precisi�n distinta.

Recomendaciones para migrar de Access a MySQL

Si nuestra base de datos anterior estaba construida en Access lo tenemos bastante f�cil, gracias a que MySQL dispone de un driver ODBC para sistemas Windows, que nos permite conectar Access con el propio MySQL y pasar informaci�n f�cilmente.

Este tema est� relatado en el art�culo Exportar datos de MySQL a Access, aunque hay que indicar que si deseamos hacer una exportaci�n desde Access en local a MySQL en remoto puede haber problemas porque no todos los alojadores permiten las conexiones en remoto con la base de datos. Si no tenemos disponible una conexi�n en remoto con nuestro servidor de bases de datos vamos a tener que cambiar la estrategia un poco.

La idea en este �ltimo caso es instalar MySQL en local y realizar la migraci�n desde Access en local a MySQL en local y luego podr�amos hacer un backup de la base de datos local y subirla a remoto, tal y como se ha relatado antes.

Recomendaciones para migrar desde SQL Server a MySQL

La verdad es que no he tenido este caso nunca, pero hay que decir que Access tambi�n nos puede ayudar en este caso. Access permite seleccionar una base de datos SQL Server y trabajar desde la propia interfaz de Access. La idea es que Access tambi�n permite trabajar con MySQL y posiblemente haciendo un puente entre estos dos sistemas gestores podemos exportar datos de SQL Server a MySQL.

Lo que es seguro que utilizando el propio Access de puente podr�amos realizar el trabajo. Primero exportando de SQL Server a Acess y luego desde Access a MySQL.

Otras bases de datos u otras t�cnicas

Si la base de datos origen dispone de un driver ODBC no habr� (en teor�a) problema para conectarla con Access, de manera similar a como se conecta con MySQL. Entonces podr�amos utilizar Access para exportar los datos, porque desde all� se podr�an acceder a los dos sistemas gestores de bases de datos.

Si no tenemos Access, o la base de datos original no tiene driver ODBC, o bien no nos funciona correctamente el proceso y no sabemos c�mo arreglarlo, otra posibilidad es exportar los datos a ficheros de texto, separados por comas o algo parecido. Muchas bases de datos tienen herramientas para exportar los datos de las tablas a ficheros de texto, los cuales se pueden luego introducir en nuestro sistema gestor destino (MySQL) con la ayuda de alguna herramienta como PhpMyAdmin.

Para ello, en la p�gina de propiedades de la tabla encontraremos una opci�n para hacer el backup de la tabla y para introducir ficheros de texto dentro de una tabla (Insert textfiles into table en ingl�s).

enlace para acceder al men� de inserci�n de archivos de texto

Accediendo a ese enlace podremos ver un formulario donde introducir las caracter�sticas del fichero de texto, como el car�cter utilizado como separador de campos, o el terminador de l�neas, etc, junto con el propio archivo con los datos, y PhpMyAdmin se encargar� de todo el trabajo de incluir esos datos en la tabla.

men� de inserci�n de archivos de texto

Como se habr� supuesto, es necesario tener creada la tabla en remoto para que podamos introducirle los datos del fichero de texto.

Cambios de un formato de datos a otro

Toda la migraci�n tiene que tener en cuenta muy especialmente, como ya se se�al�, las maneras que tenga cada base de datos de guardar la informaci�n, es decir, del formato de sus tipos de datos. Tenemos que contar siempre con la posible necesidad de transformar algunos datos como pueden ser los campos boleanos, fechas, campos memo (texto con longitud indeterminada), etc, que pueden almacenarse de maneras distintas en cada uno de los sistemas gestores, origen y destino.

En algunos casos posiblemente tengamos que realizar alg�n script que realice los cambios necesarios en los datos. Por ejemplo puede ser para localizar los valores boleanos guardados como true / false a valores enteros 0 / 1, que es como se guarda en MySQL. Tambi�n las fechas pueden sufrir cambios de formato, mientras que en Access aparecen en castellano (dd/mm/aaaa) en MySQL aparecen en el formato aaaa-mm-dd. PHP puede ayudarnos en la tarea de hacer este script, tambi�n Visual Basic Script para Access puede hacer estas tareas complejas y el propio lenguaje SQL, a base de sentencias dirigidas contra la base de datos, puede servir para algunas acciones sencillas.


Programaci�n orientada a objetos en PHP

La programaci�n orientada a objetos es una metodolog�a de programaci�n avanzada y bastante extendida, en la que los sistemas se modelan creando clases, que son un conjunto de datos y funcionalidades. Las clases son definiciones, a partir de las que se crean objetos. Los objetos son ejemplares de una clase determinada y como tal, disponen de los datos y funcionalidades definidos en la clase.

La programaci�n orientada a objetos permite concebir los programas de una manera bastante intuitiva y cercana a la realidad. La tendencia es que un mayor n�mero de lenguajes de programaci�n adopten la programaci�n orientada a objetos como paradigma para modelizar los sistemas. Prueba de ello es la nueva versi�n de PHP (5), que implanta la programaci�n de objetos como metodolog�a de desarrollo. Tambi�n Microsoft ha dado un vuelco hacia la programaci�n orientada a objetos, ya que .NET dispone de varios lenguajes para programar y todos orientados a objetos.

As� pues, la programaci�n orientada a objetos es un tema de gran inter�s, pues es muy utilizada y cada vez resulta m�s esencial para poder desarrollar en casi cualquier lenguaje moderno. En este art�culo vamos ver algunas nociones sobre la programaci�n orientada a objetos en PHP. Aunque es un tema bastante amplio, novedoso para muchos y en un principio, dif�cil de asimilar, vamos a tratar de explicar la sintaxis b�sica de PHP para utilizar objetos, sin meternos en mucha teor�a de programaci�n orientada a objetos en general.

Referencia: Se puede acceder a una descripci�n de la programaci�n orientada a objetos, publicada en DesarrolloWeb.com. http://www.desarrolloweb.com/articulos/499.php

Las clases: class

Una clase es un conjunto de variables, llamados atributos, y funciones, llamadas m�todos, que trabajan sobre esas variables. Las clases son, al fin y al cabo, una definici�n: una especificaci�n de propiedades y funcionalidades de elementos que van a participar en nuestros programas.

Por ejemplo, la clase "Caja" tendr�a como atributos caracter�sticas como las dimensiones, color, contenido y cosas semejantes. Las funciones o m�todos que podr�amos incorporar a la clase "caja" son las funcionalidades que deseamos que realice la caja, como introduce(), muestra_contenido(), comprueba_si_cabe(), vaciate()...

Las clases en PHP se definen de la siguiente manera:


<?
class Caja{
    var $alto;
    var $ancho;
    var $largo;
    var $contenido;
    var $color;

function introduce($cosa){
    $this->contenido = $cosa;
}

function muestra_contenido(){
    echo $this->contenido;
}
}
?>


En este ejemplo se ha creado la clase Caja, indicando como atributos el ancho, alto y largo de la caja, as� como el color y el contenido. Se han creado, para empezar, un par de m�todos, uno para introducir un elemento en la caja y otro para mostrar el contenido.

Si nos fijamos, los atributos se definen declarando unas variables al principio de la clase. Los m�todos se definen declarando funciones dentro de la clase. La variable $this, utilizada dentro de los m�todos la explicaremos un poco m�s abajo.

Utilizar la clase

Las clases solamente son definiciones. Si queremos utilizar la clase tenemos que crear un ejemplar de dicha clase, lo que corrientemente se le llama instanciar un objeto de una clase.

$micaja = new Caja;

Con esto hemos creado, o mejor dicho, instanciado, un objeto de la clase Caja llamado $micaja.

$micaja->introduce("algo");
$micaja->muestra_contenido();


Con estas dos sentencias estamos introduciendo "algo" en la caja y luego estamos mostrando ese contendido en el texto de la p�gina. Nos fijamos que los m�todos de un objeto se llaman utilizando el c�digo "->".

nombre_del_objeto->nombre_de_metodo()

Para acceder a los atributos de una clase tambi�n se accede con el c�digo "->". De esta forma:

nombre_del_objeto->nombre_del_atributo

La variable $this

Dentro de un m�todo, la variable $this hace referencia al objeto sobre el que invocamos el m�todo. En la invocaci�n $micaja->introduce("algo") se est� llamando al m�todo introduce sobre el objeto $micaja. Cuando se est� ejecutando ese m�todo, se vuelca el valor que recibe por par�metro en el atributo contenido. En ese caso $this->contenido hace referencia al atributo contenido del objeto $micaja, que es sobre el que se invocaba el m�todo.


Constructores en PHP

Los constructores son funciones, o m�todos, que se encargan de realizar las tareas de inicializaci�n de los objetos al ser instanciados. Es decir, cuando se crean los objetos a partir de las clases, se llama a un constructor que se encarga de inicializar los atributos del objeto y realizar cualquier otra tarea de inicializaci�n que sea necesaria.

No es obligatorio disponer de un constructor, pero resultan muy �tiles y su uso es muy habitual. En el ejemplo de la caja, que coment�bamos en el anterior art�culo de programaci�n orientada a objetos en PHP, lo normal ser�a inicializar las variables como color o las relacionadas con las dimensiones y, adem�s, indicar que el contenido de la caja est� vac�o. Si no hay un constructor no se inicializan ninguno de los atributos de los objetos.

El constructor se define dentro de la propia clase, como si fuera otro m�todo. El �nico detalle es que el constructor debe tener el mismo nombre que la clase. Atentos a PHP, que diferencia entre may�sculas y min�sculas.

Para la clase Caja definida anteriormente, se podr�a declarar este constructor:

function Caja($alto=1,$ancho=1,$largo=1,$color="negro"){
    $this->alto=$alto;
    $this->ancho=$ancho;
    $this->largo=$largo;
    $this->color=$color;
    $this->contenido="";
}


En este constructor recibimos por par�metro todos los atributos que hay que definir en una caja.

Es muy �til definir unos valores por defecto en los par�metros que recibe el constructor, igualando el par�metro a un valor dentro de la declaraci�n de par�metros de la funci�n constructora, pues as�, aunque se llame al constructor sin proporcionar par�metros, se inicializar� con los valores por defecto que se hayan definido.

Es importante se�alar que en los constructores no se tienen por qu� recibir todos los valores para inicializar el objeto. Hay algunos valores que pueden inicializarse a vac�o o a cualquier otro valor fijo, como en este caso el contenido de la caja, que inicialmente hemos supuesto que estar� vac�a.


Herencia en PHP

La programaci�n orientada a objetos tiene un mecanismo llamado herencia por el que se pueden definir clases a partir de otras clases. Las clases realizadas a partir de otra clase o mejor dicho, que extienden a otra clase, se llaman clases extendidas o clases derivadas.

Las clases extendidas heredan todos los atributos y m�todos de la clase base. Adem�s, pueden tener tantos atributos y m�todos nuevos como se desee.

Para ampliar el ejemplo que venimos desarrollando, la clase Caja, vamos a crear una clase extendida llamada Caja_tematica. Esta clase hereda de caja, pero adem�s tiene un "tema", que es la descripci�n del tipo de cosas que metemos en la caja. Con esto podemos tener varias cajas, cada una con cosas de un tema concreto.


class Caja_tematica extends Caja{
   var $tema;

   function define_tema($nuevo_tema){
   $this->tema = $nuevo_tema;
   }
}


En esta clase heredamos de Caja, con lo que tenemos a nuestra disposici�n todos los atributos y m�todos de la clase base. Adem�s, se ha definido un nuevo atributo, llamado $tema, y un m�todo, llamado define_tema(), que recibe el tema con el que se desea etiquetar la caja.

Podr�amos utilizar la clase Caja_tematica de manera similar a como lo hac�amos con la clase Caja original.


$micaja_tematica = new Caja_tematica();
$micaja_tematica->define_tema("Cables y contectores");
$micaja_tematica->introduce("Cable de red");
$micaja_tematica->introduce("Conector RJ45");
$micaja_tematica->muestra_contenido();


En este caso, el resultado que se obtiene es parecido al que se obtiene para la clase base. Sin embargo, cuando se muestra el contenido de una caja, lo m�s interesante ser�a que se indicara tambi�n el tipo de objetos que contiene la caja tem�tica. Para ello, tenemos que redefinir el m�todo muestra_contenido().

Redefinir m�todos en clases extendidas

Redefinir m�todos significa volver a codificarlos, es decir, volver a escribir su c�digo para la clase extendida. En este caso, tenemos que redefinir el m�todo muestra_contenido() para que muestre tambi�n el tema de la caja.

Para redefinir un m�todo, lo �nico que debemos hacer es volverlo a escribir dentro de la clase extendida.

function muestra_contenido(){
   echo "Contenido de la caja de <b>" . $this->tema . "</b>: " . $this->contenido;
}


En este ejemplo hemos codificado de nuevo el m�todo entero para mostrar los datos completos.

En algunas ocasiones es muy �til apoyarse en la definici�n de un m�todo de la clase base para realizar las acciones de la clase extendida. Por ejemplo, para este ejemplo, tenemos que definir un constructor para la clase Caja_tematica, en el que tambi�n se inicialice el tema de la caja. Como ya existe un m�todo constructor en la clase base, no merece la pena reescribir el c�digo de �ste, lo mejor es llamar al constructor que hab�a definido en la clase Caja original, con lo que se inicializar�n todos los datos de la clase base, y luego realizar la inicializaci�n para los atributos de la propia clase extendida.

Para llamar a un m�todo de la clase padre dentro del c�digo de un m�todo que estamos redefiniendo, utilizamos una sintaxis como esta:

function Caja_tematica($alto=1,$ancho=1,$largo=1,$color="negro",$tema="Sin clasificaci�n"){
   parent::Caja($alto,$ancho,$largo,$color);
   $this->tema=$tema;
}


Aqu� vemos la redefinici�n del constructor, de la clase Caja, para la clase Caja_tematica. El constructor hace primero una llamada al constructor de la clase base, a trav�s de una referencia a "parent". Luego inicializa el valor del atributo $tema, que es espec�fico de la Caja_tematica.

En la misma l�nea de trabajo, podemos redefinir el m�todo muestra_contenido() apoy�ndonos en el que fue declarado en la clase base. El c�digo quedar�a como sigue:

function muestra_contenido(){
   echo "Contenido de la caja de <b>" . $this->tema . "</b>: ";
   parent::muestra_contenido();
}






Autores del manual:

Hay que agradecer a diversas personas la dedicaci�n prestada para la creaci�n de este manual. Sus nombres junto con el n�mero de art�culos redactados por cada uno son los siguientes:

Todos los derechos de reproducci�n y difusi�n reservados a Guiarte Multimedia S.L.

Volver